2

我不是 JavaScript 专家,但我发现了一些这样的代码

a();

function a(){
  alert('a');
}

我很惊讶地发现它有效(我认为这样的东西在 Python 中不起作用)。我预计该函数a在创建之前无法执行。解释器如何工作以及为什么可以在声明之前调用函数?

4

3 回答 3

6

这是由于可变提升而发生的。有关更多信息,请参阅此答案

JavaScript“提升”

关于此的一些文档: https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting

如果你这样键入它,它将不起作用:

a();
a = function(){
  alert('a');
}
于 2013-07-04T10:46:59.253 回答
1

每当调用该函数或对象时,都会运行函数和对象中的代码。如果它是从直接位于页面头部或正文中的代码调用的,那么它在执行顺序中的位置实际上就是从直接代码调用函数或对象的位置。

请参阅此处的参考资料

在我们的例子中,该函数将给出错误,您可以在此处看到示例

于 2013-07-04T10:55:47.403 回答
0

这是因为函数 a() 是通过函数声明语法声明的,并且函数声明是在脚本解析后立即执行的。使用其他语法,函数表达式,如下所示:

var b = function(){
  alert('b');
}

它不起作用(参见示例)。

更多信息:http: //javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/

于 2013-07-04T10:59:56.897 回答