执行javascript函数时,如何决定使用的变量是本地还是全局?因为我只想记录对全局变量的修改。如何在javascript中检查变量是本地还是全局?
<script>
var a;
a =4;
function foo(){
var a =3;
}()
</script>
当执行上面的代码时,我只想记录a = 4,而不是a = 3;
执行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
}
}
当心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>
如果一个变种是一个原始值,然后Object.is()将始终返回true,所以你需要一些其他的对付他们的方式。
我不认为你可以像你想要的范围内访问同名变量。解决方案:如果您需要访问两者,请使用唯一名称。 –
'window.a'应该引用全局变量,但我从来没有这样做过(在不同的范围中重复使用相同的变量名),所以我不知道潜在的注意事项。 – Jasper
我想用JavaScript代码来记录对全局变量的修改。上面的代码只是一个例子。 – user2751079