0

我写了下面的脚本并在便笺簿中执行。

baz();

var baz = function(){
  console.log("Hello World");
}

当我尝试执行上述脚本时,我遇到了以下异常。我知道,这个表达式的出现是因为,提升对函数表达式无效。

/*
Exception: TypeError: baz is not a function
@Scratchpad/1:1:1
*/

现在,我将函数名 'baz' 替换为 'say_hello',然后重新运行应用程序,它运行良好,无一例外。这种行为有什么原因吗?

say_hello();

var say_hello = function(){
  console.log("Hello World");
}

4

1 回答 1

1

say_hello();

function say_hello(){
  console.log("Hello World");
}

这是真正运行良好的一个,无一例外

原因是:

JavaScript 只提升声明(变量和函数声明),而不是初始化

如果一个变量在使用后被声明和初始化,则该值将是未定义的。例如:

console.log(num); // Returns undefined 
var num;
num = 6;

如果在使用后声明变量,但事先对其进行初始化,它将返回值:

num = 6;
console.log(num); // returns 6
var num;

欲了解更多信息:仅提升声明

于 2018-10-06T02:26:57.010 回答