我编写了以下代码片段:
var f = function() { document.write("a"); };
function foo() {
f();
var f = function() { document.write("b"); };
}
foo();
我希望调用打印的函数a
,但它却给出了关于调用undefined
值的运行时错误。为什么会这样?
我编写了以下代码片段:
var f = function() { document.write("a"); };
function foo() {
f();
var f = function() { document.write("b"); };
}
foo();
我希望调用打印的函数a
,但它却给出了关于调用undefined
值的运行时错误。为什么会这样?
这是关于变量提升http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html , http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/
您的代码与下一个代码等效;
var f = function() { document.write("a"); };
function foo() {
//all var statements are analyzed when we enter the function
var f;
//at this step of execution f is undefined;
f();
f = function() { document.write("b"); };
}
foo();
由于(就像在 java 中一样)您不必担心在文件中定义事物的顺序,因此会发生某种情况。当您重新定义变量 f 时,它会清除 f 的另一个版本,但直到之后才定义它,因此当 f 被调用时,您会收到错误。