我遇到了这两个例子。示例 1 不是有效的 JavaScript - 它会引发错误。第二个示例是有效的并且工作正常。有人可以解释为什么 1 会引发错误吗?
示例 1:
var
laugh
;
laugh();
laugh = function () {
console.log( "Hahaha!!!" );
};
示例 2:
laugh();
function laugh() {
console.log( "Hahaha!!!" );
}
我遇到了这两个例子。示例 1 不是有效的 JavaScript - 它会引发错误。第二个示例是有效的并且工作正常。有人可以解释为什么 1 会引发错误吗?
示例 1:
var
laugh
;
laugh();
laugh = function () {
console.log( "Hahaha!!!" );
};
示例 2:
laugh();
function laugh() {
console.log( "Hahaha!!!" );
}
这就是所谓的“提升”是javascript。关于该主题的一些博客文章:http: //jamesallardice.com/explaining-function-and-variable-hoisting-in-javascript/
假设您的意思是选项 1 无效且选项 2 有效:
这是 JS 中的一个经典陷阱。基本上,在您的第一个函数中,您将变量laugh 声明为匿名函数,但这并没有将它变成您可以通过laugh() 执行的函数。但是,在第二个示例中,您显式声明了函数augh,您可以通过laugh() 执行该函数。
编辑以下评论:作为更正:您可以执行该功能,但您需要在执行之前声明它。否则它是未定义的。JS 在编译期间列出所有函数,以便它们可以在声明之前执行,但变量是在运行时声明和分配的,因此需要在执行之前对其进行分配。
edit2:vkurchatkin 与我正在谈论的内容有很好的联系。