如何在javascript中检查变量是本地变量还是全局变量?

时间:2013-09-26 22:23:25

标签: javascript

执行javascript函数时,如何判断使用的变量是本地变量还是全局变量?因为我只想记录对全局变量的修改。

<script>
   var a;
   a =4;

   function foo(){
       var a =3;
   }()

</script>

执行上述代码时,我只想记录a = 4,而不是a = 3;

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,因此您需要一些其他方法来处理它们。

相关问题