(function() { var x=foo(); var foo=function foo() { return "foobar" }; return x; })();上面这段代码运行后的输出是
var x = foo();
var foo=function foo() {...}
语句中变量的声明会提升,但是定义不会提升。以上代码等同于:
var foo;
var x = foo();
foo = function foo() {...}
当执行到 x = foo() 时,由于foo未被定义为函数,所以会返回
TypeError: foo is not a function
(function () { var x = foo(); var foo = function foo() { return "foobar" }; return x; })(); //上面的等价于下面的 (function () { var x; var foo; x = foo(); foo = function foo() { return "foobar" }; return x; })(); -------------------------------------------- (function () { var x = foo(); function foo() { return "foobar" }; return x; })(); //上面的等价于下面的 (function () { function foo() { return "foobar" }; var x; x = foo(); return x; })();