gpt4 book ai didi

Javascript 命名空间初始化模式需要 `var` 或 `window.`

转载 作者:行者123 更新时间:2023-11-28 19:53:07 31 4
gpt4 key购买 nike

我遇到了这种 JavaScript 初始化模式:

foo = foo || {};
alert('no errors!');

但似乎除非之前定义了 foo ,否则它不起作用。

同一模式的两种变体似乎都能正常工作:

var foo = foo || {};
alert('no errors!');

foo = window.foo || {};
alert('no errors!');

从我的 Angular 来看,我不明白为什么第一个不起作用,但另外两个却起作用。

这是为什么呢?能详细解释一下吗?

最佳答案

Javascript 有一个全局对象。在浏览器中,它由名称 window 引用。

window.foo 在全局对象中创建一个属性。

var foo 创建一个全局变量。这与全局对象的属性非常相似,但您不能对其使用delete

简单地声明 foo 而不使用 var 关键字也会在全局对象上创建一个属性。这是一种语言设计选择——一个糟糕的选择——但仍然是一种设计选择。

当您处于全局级别时,

var foowindow.foo 都同样有效。如果您位于函数(也许是模块)内部,您必须使用window.foo来确保到达全局对象。

关于Javascript 命名空间初始化模式需要 `var` 或 `window.`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23104547/

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