gpt4 book ai didi

javascript - 在条件语句中提升函数

转载 作者:行者123 更新时间:2023-11-30 12:05:54 25 4
gpt4 key购买 nike

我理解 javascript 中的提升是如何发生的,函数在变量之前被提升,并且只有声明被提升。但是当我在 if/else 条件语句中遇到提升时,就像这样:

foo(); // "b is the output"
var a = true;

if (a) {
function foo() { console.log("a"); }
}
else {
function foo() { console.log("b"); }
}

现在条件为真,所以根据 if block ,a 应该是输出,但由于某种提升,我假设 b 是输出.

b 的输出结果如何?

最佳答案

在 JavaScript 中,变量、函数表达式和函数声明被提升到作用域的顶部。

函数声明定义一个命名函数变量而不需要变量赋值。

重要的是要知道函数声明的整个主体都提升了范围。

例如

function outerFunction() {
console.log(typeof functionDeclaration); // outputs "function"

function functionDeclaration() {
// ... function body
}
}

这是因为,由于提升代码的运行方式如下:

function outerFunction() {
function functionDeclaration() {
// ... function body
}

console.log(typeof functionDeclaration); // outputs "function"
}

在您的例子中,foo 的最后一个函数声明被提升到覆盖所有其他函数声明的范围的顶部。因此,它记录“b”。

但是,变量和函数表达式会在没有指定值的情况下被提升。

例如

function outerFunction() {
console.log(functionExpression); // outputs "undefined"

var functionExpression = function () {
// ... function body
}
}

运行更像这样,

function outerFunction() {
var functionExpression = undefined;

console.log(functionExpression); // outputs "undefined"

functionExpression = function () {
// ... function body
}
}

关于javascript - 在条件语句中提升函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35250601/

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