gpt4 book ai didi

Javascript - 提升优先级

转载 作者:行者123 更新时间:2023-11-29 10:41:47 25 4
gpt4 key购买 nike

在提升中,变量优先于函数定义还是相反?请看下面的代码:

function a()
{
var x = 10;

function x() {
return 20;
}

return x;
}

最佳答案

这不是一个优先于另一个的问题(存在优先级,但这主要只是语义问题)。

这里重要的是变量声明的赋值部分没有提升,而整个函数定义

函数在变量声明之前被提升,但最终效果是一样的。

在提升之后,你的函数会像这样:

function a()
{
var x = function x() { // hoisted function declaration/definition
return 20;
};
var x; // hoisted variable declaration
x = 10; // unhoisted part of variable declaration
return x;
}

x = 10 发生在所有提升完成之后,因此这是保留在 x 中的值。


响应@thefourtheye 的请求(我认为这就是他/她的要求),如果您的原始函数如下所示:
function a() {
function x() {
return 20;
}
var x = 10;
return x;
}

那么吊装之后是这样的(同上):

function a() {
var x = function x() { // hoisted function declaration/definition
return 20;
}
var x; // hoisted variable declaration (does nothing)
x = 10; // unhoisted variable assignment
return x;
}

作为最后一个例子,试试这个:

function a() {
console.log(x);
var x = 10;
console.log(x);
function x() { return 20; };
}

调用时,打印出:

function x() { return 20; }
10

原因是提升导致函数的行为如下:

function a() {
var x = function x() { return 20; };
var x;
console.log(x);
x = 10;
console.log(x);
}

关于Javascript - 提升优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27644694/

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