Javascript学习笔记二 之 变量


Posted in Javascript onDecember 15, 2010

一.关于Javascript变量声明
在Javascript中,声明一个变量
var a=1;
也可以直接
a=1;
这两种表达是有区别的,
一个是当前作用域的局部变量,另一个则是当前作用域的全局变量;
 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量。 

var n=999; 
function f1(){ 
alert(n); 
} 
f1(); // 999

另一方面,在函数外部自然无法读取函数内的局部变量。
function f1(){ 
var n=999; 
} 
alert(n); // error

二.Javascript变量作用域链
var x='000 '; 
document.writeln(x); //得出'000 ' 
a(); 
function a(){ 
var x='aaa '; 
function b(){ 
document.writeln(x); //undefined 
var x='bbb '; 
document.writeln(x); //bbb 
} 
b(); 
document.writeln(x); //aaa 
} 
//结果是:000 undefined bbb aaa

原理:
 当变量使用时,先从函数块(权威指南中用调用对象来解释)中找,
 如果找不到,从上一级函数块找,直到找到,
 如果直到顶层代码(指var x='000 ';的位置)还没找到定义,代码会报未定义错误。
1.按顺序执行的顺序,输出x '000 '(这个没问题);
2.然后执行a()
3.在a()中执行b()
4.b()中需要输出x,该函数体内(作用域)有x定义,但是还未赋值,因此输出undefined;(重点!)
5.然后再输出x,x已赋值,因此输出bbb;
6.最后输出aaa;
了解了以上原理,我们来看下面的例子
var x = "global"; 
function f() { 
var x='f1'; 
function f2(){ 
x='f2' ;//这里我有些混淆,GLOBAL的X应该重新被赋值为'f2' 
alert(x); //返回"f2" 
alert(window.x); //返回"global" 
} 
f2(); 
alert(x) //返回"f2" 
} 
f(); 
alert(x); //返回"global",没有被重新赋值为:f2 
//结果分别弹出:f2 global f2 global

解释:
 首先执行f()中的f2(),
f2()为内部函数产生一个作用域,因此x=‘f2'修改的是f()中的x值,而非全局x.
alert(x);为‘f2',alert(window.x)为‘global'.
然后执行alert(x);这个x的作用域为全局,为‘global'
三.给新手的建议
1.减少全局变量(解决方案:把变量封装到对象中)
引用:
“把你踩在全局的那些乱七八糟的脚印都归于一人名下,能显著降低与其他应用、小工具或JS库冲突的可能性。”
? Douglas Crockford
var name = 'Jeffrey'; 
var lastName = 'Way'; 
function doSomething() {...} 
console.log(name); // Jeffrey -- or window.name

更好的写法
var DudeNameSpace = { 
name : 'Jeffrey', 
lastName : 'Way', 
doSomething : function() {...} 
} 
console.log(DudeNameSpace.name); // Jeffrey

注意看,我们是如何戏剧化地把“乱七八糟的脚印”都归到“DudeNameSpace”这对象之下的;
2.一长列变量声明?别写那么多var,用逗号吧
var someItem = 'some string'; 
var anotherItem = 'another string'; 
var oneMoreItem = 'one more string';

更好的写法
var someItem = 'some string', 
anotherItem = 'another string', 
oneMoreItem = 'one more string';

不言自明。我不知道这样做能否提升代码执行速度,但是确实让你的代码干净许多。
Javascript 相关文章推荐
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
Feb 27 Javascript
js 一个关于图片onload加载的事
Nov 10 Javascript
Js保留小数点的4种效果实现代码分享
Apr 12 Javascript
javascript调试之DOM断点调试法使用技巧分享
Apr 15 Javascript
简介AngularJS中$http服务的用法
Feb 06 Javascript
详解JavaScript节流函数中的Throttle
Jul 16 Javascript
JavaScript中push(),join() 函数 实例详解
Sep 06 Javascript
微信小程序与php 实现微信支付的简单实例
Jun 23 Javascript
node文件批量重命名的方法示例
Oct 23 Javascript
JavaScript实现的反序列化json字符串操作示例
Jul 18 Javascript
jsonp实现百度下拉框功能的方法分析
May 10 Javascript
vue样式穿透 ::v-deep的具体使用
Jun 04 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 #Javascript
iframe 父窗口和子窗口相互的调用方法集锦
Dec 15 #Javascript
jQuery Ajax使用 全解析
Dec 15 #Javascript
JQuery 应用 JQuery.groupTable.js
Dec 15 #Javascript
javascript 冒泡排序 正序和倒序实现代码
Dec 14 #Javascript
javascript中的关于类型转换的性能优化
Dec 14 #Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 #Javascript
You might like
PHP 变量定义和变量替换的方法
2009/07/30 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
js实现运行代码需要刷新的解决方法
2007/08/18 Javascript
用js统计用户下载网页所需时间的脚本
2008/10/15 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
关于微信中a链接无法跳转问题
2016/08/02 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
浅谈jquery页面初始化的4种方式
2016/11/27 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
Vue实现商品飞入购物车效果(电商项目)
2019/11/26 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
Python 连连看连接算法
2008/11/22 Python
浅谈python中get pass用法
2019/03/19 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
Python 如何调试程序崩溃错误
2020/08/03 Python
HTML5的一个显示电池状态的API简介
2015/06/18 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
教师求职自荐信
2014/03/09 职场文书
软件工程毕业生自荐信
2014/07/04 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
消防安全月活动总结
2015/05/08 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
2021/06/11 Python
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server