-1

我遇到了这两个例子。示例 1 不是有效的 JavaScript - 它会引发错误。第二个示例是有效的并且工作正常。有人可以解释为什么 1 会引发错误吗?

示例 1:

var
  laugh
;

laugh();

laugh = function () {
  console.log( "Hahaha!!!" );
};

示例 2:

laugh();

function laugh() {
  console.log( "Hahaha!!!" );
}
4

2 回答 2

3

这就是所谓的“提升”是javascript。关于该主题的一些博客文章:http: //jamesallardice.com/explaining-function-and-variable-hoisting-in-javascript/

于 2013-10-28T15:53:39.793 回答
1

假设您的意思是选项 1 无效且选项 2 有效:

这是 JS 中的一个经典陷阱。基本上,在您的第一个函数中,您将变量laugh 声明为匿名函数,但这并没有将它变成您可以通过laugh() 执行的函数。但是,在第二个示例中,您显式声明了函数augh,您可以通过laugh() 执行该函数。

编辑以下评论:作为更正:您可以执行该功能,但您需要在执行之前声明它。否则它是未定义的。JS 在编译期间列出所有函数,以便它们可以在声明之前执行,但变量是在运行时声明和分配的,因此需要在执行之前对其进行分配。

edit2:vkurchatkin 与我正在谈论的内容有很好的联系。

于 2013-10-28T15:51:10.893 回答