1

我注意到奇怪的问题。

看看这个 jQuery:

$(function(){
    status = 1;
    status1 = 2;

    $('body').append(status+' - '+status1);
});

小提琴

如您所见,输出为:

- 2

statusJavaScript 或 jQuery 的系统变量也是如此吗?

还有其他像这样的变量吗?

4

2 回答 2

8

JavaScript 具有全局变量,在浏览器中,全局变量是全局对象的属性,即window.

现在,window它本身有几个预定义的属性,其中一些是只读的,例如window.status [MDN](这也可能因浏览器而异!)。因此,使用这样的名称创建全局变量将失败(该变量已经存在,但您不能为其分配新值)。

您可以在MDN 文档中找到预定义属性的列表。


这是您应该避免使用全局变量的原因之一。如果您使用局部变量(通过声明变量var并在必要时将所有代码放在一个函数中),您就不会有这个问题:

(function() {
    var status = 'foo';
    // ....
}());
于 2013-04-11T11:02:21.673 回答
3

全局对象window确实有一个名为的属性status,用于设置浏览器底部状态栏中的文本。

通过不使用var关键字,您将覆盖您所引用的此属性window.status。显然,只要用户没有将dom.disable_window_status_change首选项设置为false.

有关文档,请参阅链接,有关所有“全局”属性的列表,请参阅此链接。

JS 中也有一些单词被认为是保留的,所以你应该避免使用这些,即使在本地范围内也是如此。

于 2013-04-11T11:08:33.867 回答