执行javascript函数时,如何判断使用的变量是本地变量还是全局变量?因为我只想记录对全局变量的修改。
<script>
var a;
a =4;
function foo(){
var a =3;
}()
</script>
执行上述代码时,我只想记录a = 4,而不是a = 3;
答案 0 :(得分:7)
<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>
那样的东西?
答案 1 :(得分:3)
全局变量作为全局对象的属性添加,即浏览器中的 window 。要测试对象是否具有属性,请使用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
}
}
对于更通用的代码,环境可能没有 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
}
}
小心 typeof 测试。它们只告诉您变量值的类型并返回 undefined 如果该属性不存在或其值已设置为 undefined
答案 2 :(得分:0)
我知道这个问题很老但我一直在找同样的事情。当我找不到答案时,我最终想出了这个:
<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>
如果var a是原始值,那么Object.is()将始终返回true,因此您需要一些其他方法来处理它们。