gpt4 book ai didi

javascript - this.globalvar 与 window.globalvar

转载 作者:行者123 更新时间:2023-11-28 13:53:35 26 4
gpt4 key购买 nike

我最近在某处读到(很抱歉我无法提供源代码),您可以使用 this.varname 来访问全局变量以替换 window.varname节省 2 个字符

var myVar = "global";
function myFunc() {
var myVar = "notGlobal";
alert( this.myVar ); //global
}

它似乎有效,但我想知道是否:

  • 在旧浏览器中使用是安全的
  • 跨浏览器兼容
  • 在一些奇怪的情况下它会失败

最佳答案

我不认为我会这样做,但它完全跨浏览器兼容如果this指的是全局对象(窗口)。是否取决于所讨论的函数是如何调用的(在全局范围内,this确实引用了全局对象),以及所讨论的代码是否处于“严格模式”。 (在 strict mode 中,this 引用全局对象。Kudos and upvotes to Esailija for pointing that out. )

在非严格代码中:

因此在全局范围内:

console.log(this === window); // true if not in strict mode

同样,如果您有直接调用的函数:

function foo() {
console.log(this === window);
}

foo(); // Logs "true"

但是,在 JavaScript 中,this 完全由函数的调用方式设置。因此我们可以调用 foothis 设置为其他内容:

var obj = {};
foo.call(obj); // Now it logs "false", `this` === `obj` during the call

同样:

var obj = {};
obj.f = foo;
obj.f(); // Also logs "false", `this` === `obj` during the call

所以总而言之,在全局范围内(不在任何函数调用中),是的,this 可靠地指向全局对象,并且如果您控制函数的调用方式并且在不调用它的情况下调用它将 this 设置为其他任何内容(通过 callapply,或者通过从对象属性 a'la obj.f< 使用它 上面),那么,它将再次可靠地引用全局对象。这由章节 10.4.1 涵盖。 (输入全局代码)10.4.3规范的(输入功能代码)。我相信,从一开始就是如此;当然在过去 15 年里都是如此,因此您不太可能找到不合规的环境。

更多阅读:

关于javascript - this.globalvar 与 window.globalvar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9383098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com