gpt4 book ai didi

javascript - var x = x || {};与 x = window.x || {};

转载 作者:行者123 更新时间:2023-12-03 12:30:27 31 4
gpt4 key购买 nike

我正在编写一个脚本,我希望避免污染 DOM 的其余部分,它将是一个用于收集一些基本访问者分析数据的第 3 方脚本。

我通常使用以下内容创建一个伪“命名空间”: var x = x || {};

我正在查看的其他一些人的代码使用:x = window.x || {};

我知道不设置var将会设置一个全局var。这是唯一的区别吗?

我正在检查 Chrome 和 Webstrom 中的两个对象,它们看起来相同。

有人可以解释这两种方法之间的区别以及使用其中一种方法对另一种方法的影响(如果有的话)?

正如我所说,当我检查创建的对象时,它们看起来与我相同,但我通过 JS 学到了...外观可能具有欺骗性。

最佳答案

这两者并不完全相同,区别实际上并不在于使用 window.x 读取变量,而在于 x 的创建方式。一个在严格模式下工作,另一个则不然。

对于第一个:

var x = x || {};

这本质上是相同的:

var x;
if (!x) x = {};
<小时/>

对于第二种方法:

x = window.x || {};

这本质上是相同的:

if (!window.x) x = {};

在第二个中,需要 window.x 而不仅仅是 x,因为以这种方式引用 undefined variable 而无需 window。前面的会导致错误。除此之外,另一个主要区别是第一个有:

var x;
x = {};

而且,第二个只有:

x = {};

第二个模型隐式创建一个全局变量,而不先声明它,这在严格模式下是不合法的。

<小时/>

因此,这里的主要功能差异并不在于通过 window.x 进行读取,而是在不使用 var 声明变量的情况下进行赋值,并且在运行时这种差异非常显着在严格模式下。如果您希望代码在严格模式下工作,那么在这两个选择之间,您必须使用第一个选项,因为严格模式下不允许隐式声明的全局变量。

关于javascript - var x = x || {};与 x = window.x || {};,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23959587/

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