var f = function(){} 和 function f(){};区别 与JavaScript的预编译

偶然看到一道题目

var x = 0;
    var f = function(){
        x=1;
    }
    f();
    alert(x);
    function f(){
        x=2;
    }
    f();
    alert(x);

问alert的结果是什么。

考点就是JavaScript hoisting。大意就是预先解释。答案是 1,1。下面我就来说说为什么。

任何 var 和任何 function definition 都会被提到最前面,但 function expression 不受影响。

简单来说,

doSomething();
var x = 1;


完全等价于

var x;
doSomething();
x = 1;

 


注意只有 var 被提前,赋值不变。

doSomething();
function fn1() {};
var fn2 = function() {};


完全等价于

var fn2;
function fn1() {};
doSomething();
fn2 = function() {};

 

 

 

 

这样看结果就显而易见了

posted @ 2014-03-06 17:27  zziilii  阅读(1159)  评论(0)    收藏  举报