在创建之前已经执行了功能

时间:2013-07-04 10:45:13

标签: javascript

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

a();

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

我惊讶地发现它有效(我认为类似的东西在Python中不起作用)。我希望函数a在创建之前不能执行。解释器如何工作以及为什么在声明之前可以调用函数?

3 个答案:

答案 0 :(得分:6)

这是因为可变升降。 有关详细信息,请参阅此答案

JavaScript 'hoisting'

有关此问题的一些文档: 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/