gpt4 book ai didi

javascript - 有人可以解释这些功能定义和提升吗?

转载 作者:行者123 更新时间:2023-11-29 16:58:35 25 4
gpt4 key购买 nike

有人可以向我解释以下三个示例中发生了什么吗?我的想法是第一个例子,bar 没有被执行(它只是一个函数声明)所以当 foo 被执行时,输出是 undefined ?对于第二个示例,执行 bar 以便返回值 3。对于第三个例子,我不知道为什么它会产生 8。

// 1)
function foo() {
function bar() {
return 3;
}
}
foo(); // undefined

// 2)
function foo() {
function bar() {
return 3;
}
return bar();
}
foo(); // 3

// 3)
function foo(){
function bar(){
return 3;
}
return bar();
function bar() {
return 8;
}
}
foo(); // 8

最佳答案

你对示例 1 和 2 的看法是正确的,所以我只讨论示例 3。

虽然看起来您在重新定义它之前调用了 bar(),但 function 声明会被特殊处理。这些函数都是在第一次进入包含作用域时定义的,它们不是按顺序执行的。如果同一个函数有多个声明,最后一个是有效的。所以两者之间没有区别:

function bar() {
// version 1
}
return bar();
function bar() {
// version 2
}

和:

function bar() {
// version 2
}
return bar();

这是函数声明不同于将函数表达式赋值给变量的方式。如果你改为写:

function foo() {
var bar = function() {
return 3;
}
return bar();
var bar = function() {
return 8;
}
}
foo();

那么它会返回 3

关于javascript - 有人可以解释这些功能定义和提升吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30085731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com