gpt4 book ai didi

javascript - 为什么局部变量会杀死我的全局变量?

转载 作者:行者123 更新时间:2023-12-03 01:09:41 24 4
gpt4 key购买 nike

很抱歉问这个问题,但这个问题确实搞砸了我的一天。

以下代码按其应有的方式发出警报 10:

var globalId='10';  
function check(){
alert(globalId);
}
check();

但是接下来的代码会警告未定义:

var globalId='10';  
function check(){
alert(globalId);
var globalId;
}
check();

我知道,如果我在函数中声明一个变量,它是一个局部变量,但如果我已经将它声明为全局变量,我的警报怎么会显示未定义

这是一个简单的示例,但在我的原始代码中,我在函数开头之间做了很多事情,然后很长一段时间我检查了 globalId 是否已定义,否则定义它: if(!globalId){var globalId;} 这意味着位于函数顶部的警报生成未定义,就好像 JavaScript 首先执行整个函数一样,只是为了查看是否有任何变量“可能”被声明,如果是,则声明它们,因此我的警报指向“未声明”变量。

任何人都可以向我解释为什么会发生这种情况吗?JavaScript 在执行函数之前是否“预先声明”了所有变量,甚至是在不满足的条件下声明的变量?

最佳答案

在 javascript 中,你应该知道有一个叫做 HOISTING 的东西。

这本质上意味着,当您声明任何局部变量时,变量声明会自动带到作用域的顶部。

例如:-

var globalId='10';
function check(){
alert(globalId); var globalId; }
check();

更改为 -

var globalId='10';
function check(){
var globalId;
alert(globalId);}
check();

由于 globalID 仍未分配任何值,因此它在输出中返回 undefined。局部变量始终优先于同名的全局变量。

关于javascript - 为什么局部变量会杀死我的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499120/

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