执行 JavaScript 函数时,如何确定使用的变量是局部变量还是全局变量?
因为我只想记录对全局变量的修改。
<script>
var a;
a =4;
function foo(){
var a =3;
}()
</script>
执行上述代码时,我只想记录a=4,而不是a=3;
执行 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
}
}
小心typeof测试。它们只告诉您变量值的类型,如果属性不存在或其值已设置为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,因此您需要其他方法来处理它们。