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

标签 javascript variables global-variables local-variables

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

以下代码按其应有的方式发出警报 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/

相关文章:

javascript - 网页上的按钮将变为 'behind' 元素,无论 Z 索引如何,位置都定义为固定

java - 如何通过添加字符串来获取变量

PHP - 两个类,彼此正确对话

Javascript匿名函数不更新全局变量

javascript - 为什么 e += 1 和 e = e + 1 在 CoffeeScript 中的编译方式不同?

javascript - 使用 JavaScript 从 url 中提取数据

javascript - 将数据直接加载到选择框angularjs

javascript - Android 2.2 SDK - 不安全的 JavaScript 尝试使用 URL 访问框架 - Google Checkout

c++ - C++中的多个输入和输出

date - 将读取日期的结果保存到vim脚本中的变量中