如何使用低于其用法定义的函数?

时间:2011-10-05 10:20:55

标签: javascript

我一直认为function a(){}a = function(){};

相同

然而,这两个片段的表现不同:

a();
function a() {
  alert("Booya");
}

打印Booya。

a();
a = function() {
  alert("Booya");
}

因异常而失败,这是有道理的,因为a在调用时确实没有被定义。

那么 - 即使a()定义在其使用点之下,什么样的'魔术'才能让第一个代码段工作?

5 个答案:

答案 0 :(得分:6)

这是函数声明和函数表达式之间的区别。这种差异很好地描述了例如here

答案 1 :(得分:2)

请参阅此文章以获得解释:http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting

  

函数声明和变量声明总是被JavaScript解释器无形地移动(“提升”)到其包含范围的顶部。

答案 2 :(得分:2)

在JavaScript中,所有声明都被提升。表示变量在声明 之前可以使用,并且可以在声明之前使用函数。   将所有声明移到当前脚本的顶部是JavaScript的默认行为。

但是此功能可能会导致应用程序出现错误,因此我们使用严格模式指令来避免错误。严格模式不允许在没有声明的情况下使用变量。

here

的更多信息

答案 3 :(得分:0)

没有神奇的,需要正确的编码。 AFAIK

  • 文档已加载并解析,函数已“加载”。该脚本正在执行。到目前为止没有问题_a()_被发现。
  • 没有任何功能'maped'。脚本si逐行执行。它尝试调用 a(),然后将函数赋值给全局变量 a

答案 4 :(得分:-1)

函数是全局定义的。但是,如果将函数赋值给变量,就像在第二种情况下那样,变量的范围规则生效:在定义变量之前不能调用函数。