Arron的博客

导航

javascript中函数作用域和声明提前

javascript不像java等其他强类型语句,没有块级作用域(括号内的代码都有自己的作用域,变量在声明它们的代码段之外不可见)一说,但有自己的独特地方,即函数作用域。

函数作用域:变量在声明它们的函数体内以及这个函数体的任意内部函数体内是有定义的。

如下所示代码,在不同位置定义了变量i、j和k,它们都在同一个作用域内,即在函数体内均是有定义的。

function test(){
    var i=0;        //i在整个函数体内均有定义
    if(true){
        var j=0;    //j在整个函数体内均有定义
        for(var k=0;k<10;k++){    //k在整个函数体内均有定义
            console.log(k);        //输出0~9
        }
        console.log(k);            //输出10
    }
    console.log(j);                //输出0
}
test();

声明提前:变量的声明(不包括赋值)都被提前至函数体顶部。
注意:声明提前是在javascript引擎的预编译时进行的,是在代码开始运行之前。

下面是有关代码及注释:

var i=1;
function test(){
    console.log(i);                //输出undefined
    var i=2;
    console.log(i);                //输出2
}
test();

上述代码可等价如下所示:

var i=1;
function test(){
    var i;
    console.log(i);                //输出undefined
    i=2;
    console.log(i);                //输出2
}
test();

 

posted on 2014-11-25 20:55  aaron_shu  阅读(141)  评论(0编辑  收藏  举报