4

执行 JavaScript 函数时,如何确定使用的变量是局部变量还是全局变量?

因为我只想记录对全局变量的修改。

<script>
   var a;
   a =4;

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

</script>

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

4

3 回答 3

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>

类似的东西?

于 2013-09-26T22:27:11.423 回答
3

全局变量被添加为全局对象的属性,即浏览器中的窗口。要测试对象是否具有属性,请使用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

于 2013-09-26T22:48:29.450 回答
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>

如果变量a是原始值,那么Object.is()将始终返回 true,因此您需要其他方法来处理它们。

于 2015-05-18T14:26:50.780 回答