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() {};
这样看结果就显而易见了

浙公网安备 33010602011771号