JavaScript中变量的作用域——函数作用域

JavaScript中变量的作用域与Java或者C语言不一样,它采取的不是常见的块级作用域(一般用花括号表示),而是函数作用域。在函数中任意位置定义的变量,在其后面的代码中都是可见的。如:
function test(o){
var i = 0;
if(typeof o != “object”){
var j = 0;
for(var k = 0; k<10;k++){
alert(k);
}

j = k;
alert(‘k:’+k);
}

alert(‘j:’+j);
}

test(‘a’);

j和k在定义后就一直可见,上面这段代码里,alert(‘j:’+j);正确输出:
j:10

但是需要注意的一点是,不管函数体内的变量在哪定义,它在运行的时候,都被提前到函数的开始。
var scope = “global”;
function f(){
alert(scope);

var scope = “local”;
alert(scope);
}

f();

输出结果为:
undefined
local
第一个结果为undefined是因为它并不是我们所想像的全局变量了,而是已经被函数内声明的scope变量覆盖了,但是它的赋值操作scope = “local”却还是在原地,等同于如下代码:
var scope = “global”;
function f(){
var scope;
alert(scope);

scope = “local”;
alert(scope);
}

标签: , ,
文章分类 跨平台开发

发表评论