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 相关文章推荐
js 数组操作代码集锦
Apr 28 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
js 判断浏览器使用的语言示例代码
Mar 22 Javascript
基于OL2实现百度地图ABCD marker的效果
Oct 01 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
Javascript 实现放大镜效果实例详解
Dec 03 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
JavaScript继承与多继承实例分析
May 26 Javascript
js中时间格式化的几种方法
Jul 22 Javascript
js函数柯里化的方法和作用实例分析
Apr 11 Javascript
swiper4实现移动端导航栏tab滑动切换
Oct 16 Javascript
React Native登录之指纹登录篇的示例代码
Nov 03 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
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
php中使用gd库实现远程图片下载实例
2015/05/12 PHP
yii2缓存Caching基本用法示例
2016/07/18 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
快速解决jquery之get缓存问题的最简单方法介绍
2013/12/19 Javascript
为jQuery添加Webkit的触摸的方法分享
2014/02/02 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
在bootstrap中实现轮播图实例代码
2017/06/11 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
JavaScript使用prototype属性实现继承操作示例
2020/05/22 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
深度解读vue-resize的具体用法
2020/07/08 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
Python定时执行之Timer用法示例
2015/05/27 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Linux(Redhat)安装python3.6虚拟环境(推荐)
2018/05/05 Python
django+mysql的使用示例
2018/11/23 Python
Python编程深度学习绘图库之matplotlib
2018/12/28 Python
python集合是否可变总结
2019/06/20 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
《月亮湾》教学反思
2014/04/14 职场文书
参赛口号
2014/06/16 职场文书
运动会广播稿200字
2014/10/18 职场文书
劳模先进事迹材料
2014/12/24 职场文书
学籍证明模板
2015/06/18 职场文书