如何在 JavaScript 中检查变量是局部变量还是全局变量
How can I check a variable is local or global in JavaScript?
执行 JavaScript 函数时,如何确定使用的变量是局部变量还是全局变量?
因为我只想记录对全局变量的修改。
<script>
var a;
a =4;
function foo(){
var a =3;
}()
</script>
执行上述代码时,我只想记录 a=4,而不是 a=3;
<script>
var a;
a = 4;
function foo(){
// version 1:
if (window.hasOwnProperty('a')){
// "global" a exists
}
// version 2:
if (typeof window.a !== 'undefined'){
// "global" a exists and is defined
}
}();
</script>
类似的东西?
全局变量被添加为全局对象的属性,全局对象是浏览器中的窗口。若要测试对象是否具有属性,请使用 in
运算符:
// In global scope
var bar;
function foo() {
if (bar in window) {
// bar is a property of window
} else {
// bar isn't a property of window
}
}
对于更通用的代码,环境可能没有窗口对象,因此:
// In global scope
var global = this;
function foo() {
if (bar in global) {
// bar is a property of the global object
} else {
// bar isn't a property of the global object
}
}
当心测试类型。它们只告诉您变量值的类型,如果属性不存在或其值已设置为 undefined,则返回 undefined。
我正在寻找同样的东西。当我找不到答案时,我最终想出了这个:
<script>
var a;
a = {prop1: 'global object'};
(function foo() {
var a = {prop1: 'local object'};
var isLocal = true;
if (window.hasOwnProperty('a')) {
if(Object.is(a, window['a'])) {
isLocal = false;
}
}
})();
</script>
如果变量 a
是一个基元值,那么Object.is()
将始终返回 true,因此您需要其他方法来处理它们。
相关文章:
- 如何使用局部变量创建全局变量
- 局部全局变量问题 - JavaScript
- 局部变量在应用 function.call() 后变为全局变量
- 在d3.js中将局部变量转换为全局变量
- 为局部嵌套函数中的全局变量设置值
- JavaScript局部变量和全局变量混淆
- 如何在 JavaScript 中将局部变量转换为全局变量
- 函数是否像局部变量一样适用于全局变量
- JavaScript 中的全局变量到局部变量
- 为什么我的 JavaScript 提升的局部变量返回未定义,但提升的全局变量返回空白
- 如何在 JavaScript 中检查变量是局部变量还是全局变量
- 为什么全局变量无法访问,即使稍后在代码中定义了局部变量
- Javascript 局部和全局变量在回调函数中失去作用域
- 提升局部变量掩蔽全局变量
- 如何使用firebase使javascript中的局部变量成为全局变量
- 在JavaScript中更改局部变量会影响具有不同名称的原始全局变量
- 用冲突的局部变量重新定义全局变量
- 多个局部变量声明与一个全局变量声明
- 当javascript中的条件变量(全局变量)发生变化时,停止循环
- 如何比较两个事件的结果?(可能使用局部或全局变量?)