如何在JavaScript中检查变量是局部变量还是全局变量?

如何在JavaScript中检查变量是局部变量还是全局变量?,javascript,Javascript,执行JavaScript函数时,如何确定使用的变量是局部变量还是全局变量 因为我只想记录对全局变量的修改 <script> var a; a =4; function foo(){ var a =3; }() </script> var a; a=4; 函数foo(){ var a=3; }() 在执行上述代码时,我只想记录a=4,而不是a=3 <script> var a; a = 4; func

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

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

<script>
   var a;
   a =4;

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

</script>

var a;
a=4;
函数foo(){
var a=3;
}()
在执行上述代码时,我只想记录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>
var a; a=4; 函数foo(){ //第1版: if(window.hasOwnProperty('a')){ //“全球”a存在 } //第2版: if(window.a的类型!==“未定义”){ //“全局”a存在并已定义 } }();

类似的情况?

全局变量作为全局对象的属性添加,全局对象是浏览器中的窗口。要测试对象是否具有属性,请使用中的
操作符:

// 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
  }
}

注意测试的类型。它们只会告诉您变量值的类型,如果属性不存在或其值已设置为未定义,则返回未定义。

我正在寻找相同的内容。当我找不到答案时,我最终得出了以下结论:

<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;
a={prop1:'全局对象'};
(函数foo(){
var a={prop1:'本地对象'};
var isLocal=true;
if(window.hasOwnProperty('a')){
if(Object.is(a,window['a'])){
isLocal=false;
}
}
})();

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

我不认为您可以像希望的那样在范围之外访问同名变量。解决方案:如果需要同时访问这两个变量,请使用唯一的名称。
窗口。a
应该引用全局变量,但我从来没有这样做过(在不同的范围内重复使用相同的变量名称),因此我不知道潜在的警告。我想插入javascript代码,以便只记录对全局变量的修改。上面的代码只是一个例子。Typeof只告诉你类型,而不是它是否“存在”。
中的
运算符就是用于此的。那么,IMHO existing是由是否定义了变量来定义的。但是我想你可以预先使用
window.hasOwnProperty('a')
或者
a在window
中。[so limit]这在大多数情况下都应该有效,但是如果
typeof window.a===“undefined”
它可能意味着它已定义,但保留
undefined
值。或者已声明且未分配任何值。