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

How can I check a variable is local or global in JavaScript?

本文关键字:局部变量 全局变量 变量 检查 JavaScript      更新时间:2023-09-26

执行 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
  }
}

当心测试类型。它们只告诉您变量值的类型,如果属性不存在或其值已设置为 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,因此您需要其他方法来处理它们。