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