gpt4 book ai didi

javascript - 对为什么有时有或没有 var 的 vars 工作感到困惑?

转载 作者:行者123 更新时间:2023-11-30 10:53:28 24 4
gpt4 key购买 nike

我真的很困惑,为什么有时在命名空间对象中使用“var”时在它们前面声明时 vars 不起作用。在每个变量前添加“var”不是将其保留在全局命名空间之外的正确做法吗?

或者创建任何 var 而不首先在我的命名空间对象中声明“var”,确保这一点,所以我不必担心“var”?

这是我的代码示例:

MYNAME.DoStuff = {
initialize: function() {
var var1 = 'name'; //1
var2 = 'name'; //2
this.var3 = 'name'; //3

var $var4 = $('#' + name); //4
$var5 = $('#' + name); //5
this.$var6 = $('#' + name); //6
},

linkStuff: function() {
// then use the vars from the init above in here
}
}

MYNAME.DoStuff.initialize();

谁能告诉我哪个数字(1、2 或 3)是正确的?在某些情况下我会使用多个或全部吗?什么时候我需要用 jQuery 做 DOM 引用呢?哪种方式是正确的(4、5 或 6)?

最佳答案

var语句会将变量绑定(bind)到当前函数的范围,在您的示例中为 var1只能在 initialize 内访问.

你的第二个例子,var2 = 'name';只是对 -可能- 未声明的标识符的赋值。

这是一个反模式,应该避免。如果标识符在范围链中的较高位置不可解析,var2最终将成为全局对象的属性 - 一个隐含的全局,因为大多数时候你实际上试图避免全局 -。

此外,新的 ECMAScript 5 严格模式完全不允许这种赋值,避免它们......

第三个例子,this.var3将在当前 对象中创建一个属性,在您的示例中为this initialize 的值将引用MYNAME.DoStuff因为您通过 MYNAME.DoStuff.initialize(); 调用初始化方法.

在第三个示例中,您可以在 linkStuff 上访问此类属性函数,仅通过 this.var3 - 如果你调用那个linkStuff正常运行,例如MYNAME.DoStuff.linkStuff(); -.

关于javascript - 对为什么有时有或没有 var 的 vars 工作感到困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3919684/

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