功能提升中的奇怪行为



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

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

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;

有关详细信息:仅悬挂声明

相关内容

  • 没有找到相关文章

最新更新