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 相关文章推荐
基于jquery的一个拖拽到指定区域内的效果
Sep 21 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
Dec 09 Javascript
JS连连看源码完美注释版(推荐)
Dec 09 Javascript
限制上传文件大小和格式的jQuery插件实例
Jan 24 Javascript
js生成验证码并直接在前端判断
May 15 Javascript
Bootstrap精简教程
Nov 27 Javascript
Javascript编程之继承实例汇总
Nov 28 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
Jul 05 Javascript
详解Node.js中exports和module.exports的区别
Apr 19 Javascript
javascript浏览器用户代理检测脚本实现方法
Oct 27 Javascript
Vue动态路由缓存不相互影响的解决办法
Feb 19 Javascript
Vue router配置与使用分析讲解
Dec 24 Vue.js
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 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
PHP 第一节 php简介
2012/04/28 PHP
PHP实现动态web服务器方法
2015/07/29 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
javascript 学习笔记(六)浏览器类型及版本信息检测代码
2011/04/08 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
js定时调用方法成功后并停止调用示例
2014/04/08 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
Nodejs学习笔记之测试驱动
2015/04/16 NodeJs
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
python计算最小优先级队列代码分享
2013/12/18 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
python实现随机漫步方法和原理
2019/06/10 Python
django使用haystack调用Elasticsearch实现索引搜索
2019/07/24 Python
使用PyCharm进行远程开发和调试的实现
2019/11/04 Python
AmazeUI 图标的示例代码
2020/08/13 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
金融专业大学生自我评价
2014/01/09 职场文书
经销商订货会主持词
2014/03/27 职场文书
党风廉设责任书
2014/04/16 职场文书
文明礼貌主题班会
2015/08/14 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书