功能提升中的异常行为

时间:2018-10-06 02:21:05

标签: javascript scratchpad

我写了下面的脚本并在暂存器中执行。

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");
}

1 个答案:

答案 0 :(得分: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;

有关更多信息:Only Declarations Are Hoisted