JavaScript为什么选项1不起作用而选项2不起作用

时间:2013-10-28 15:47:37

标签: javascript

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

示例1:

var
  laugh
;

laugh();

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

示例2:

laugh();

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

2 个答案:

答案 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与我正在谈论的内容有很好的联系。