javascript的变量及其作用域和提前声明
javascript中变量及其作用域是基础中的重点,在阅读JavaScript权威指南之后的总结:
如果未在var声明语句中给变量指定初始值,那么虽然声明了这个变量,但在给它存入一个值之前,它的初始值就是undefined
(在一个作用域内如果声明了一个变量,在赋值前也是undefined)
JavaScript 的函数作用域是指在函数内部声明的所有变量在函数体内始终是可见的。有意思的是,这意味着变量在声明之前甚至已经可用。JavaScript的这个特性被非正式地称为 声明提前(hoisting),即JavaScript函数里声明的所有变量(但不涉及赋值)都被“提前”至函数体的顶部。
“声明提前”这步操作是在JavaScript引擎的“预编译”时进行的,是在代码开始运行之前,更多细节请阅读相关ppt:
http://www.slideshare.net/lijing00333/javascript-engine(要翻墙)
百度云盘链接:http://pan.baidu.com/s/1mguZ1OG
例如:
var scope=’global’;
debugger;
function F(){
debugger;
alert(scope);//undefined
var scope=’local’;//变量在这里赋初始值,但变量本身在函数体内任何地方均是由定义的
alert(scope);//local
alert(cope);//cope is not defined (未定义)
}
F();
即:
function a(){
alert(scope);
var scope=’local’;
alert(scope);
}
可以理解为:
function a(){
var scope;
alert(scope);
scope=’local’;
alert(scope);
}
另外对于 JavaScript权威指南 本人是十分推荐的,特别是许多web大牛都十分喜爱的一本书
还没有评论,来说两句吧...