Javascript作用域和变量提升
下面的程序是什么结果?
var foo = 1;
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();
结果是10;为什么呢,因为计算机处理这段代码的顺序是这样的:
function bar(){var foo;if(!foo)(foo = 10;)alert(foo)}var foo;foo = 1;bar();
这里if(!foo),由于foo未被声明,所以!foo的值为true(不信可以alert试一下),所以if里面的语句会被执行,自然弹出的是10。
那么javascript中语句执行的顺序是什么规则呢?
1 语言内置:所有的作用域里都有this和arguments;(译者注:经过测试arguments在全局作用域是不可见的)
2 形式参数:函数的形式参数会作为函数体作用域的一部分;
3 函数声明:像这种形式:function foo(){};
4 变量声明:像这样:var foo;
就是按上面的序号依次往下执行。
还没有评论,来说两句吧...