JavaScript权威指南4-JS解析器

考虑下面两个代码:

scope = 'hello';    
function func(){
    console.log(scope);    //hello
}
func();
scope = 'hello';
function func(){
    console.log(scope);    //undefined
    var scope = 'world';
}
func();

解释:JavaScript的函数作用于是指在函数内部的所有变量在函数体内始终是课件的.有意思的是,这意味着变量被声明前就已经被使用了.JavaScript的这个特性通常被称作声明提前,即JavaScript函数里声明的所有变量都被提前到函数体的顶部.如上面第二个代码等价于:

scope = 'hello';
function func(){
    var scope;
    debug(scope);
    scope = 'world';
}
func();

类似的还有函数的预解析,有下面例子:

function a(){}    
console.log(a);    //function a(){}

同时,函数的预解析可以被表达式擦掉

var a = 1;
function a(){}
console.log(a);//1

总结:JS解析器的执行步骤:

    1.预解析

        1).变量声明

        2).函数声明

    2.逐行解读代码

        1).表达式

        2).函数调用

你可能感兴趣的:(提前,javascript权威指南,作用于)