我写了以下代码片段:
var f = function() { document.write("a"); };
function foo() {
f();
var f = function() { document.write("b"); };
}
foo();
我期望打印a
的函数被调用,但它反而给出了一个关于调用undefined
值的运行时错误。为什么会这样?
答案 0 :(得分:14)
这是关于提升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();
答案 1 :(得分:0)
因为(就像在java中一样)你不必担心在文件中定义事物的顺序会发生某种情况。重新定义变量f时,它会删除f的另一个版本,但直到之后才定义f,当调用f时会出现错误。