我不是JavaScript专家,但我发现了一些像这样的代码
a();
function a(){
alert('a');
}
我惊讶地发现它有效(我认为类似的东西在Python中不起作用)。我希望函数a
在创建之前不能执行。解释器如何工作以及为什么在声明之前可以调用函数?
答案 0 :(得分:6)
这是因为可变升降。 有关详细信息,请参阅此答案
有关此问题的一些文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting
如果你这样输入,它将无效:
a();
a = function(){
alert('a');
}
答案 1 :(得分:1)
只要那样,就会运行函数和对象中的代码 调用函数或对象。如果从代码中调用它 直接在页面的头部或主体然后它的位置 执行顺序实际上是功能或对象所在的位置 从直接代码调用。
请参阅reference here。
在我们的例子中,该函数会给出错误,因为您可以看到example here。
答案 2 :(得分:0)
这是因为函数a()是通过函数声明语法声明的,而函数声明是在解析脚本后立即执行的。使用其他语法,函数表达式,如下所示:
var b = function(){
alert('b');
}
它不起作用(see example)。
更多信息:http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/