【问题标题】:Does Javascript / jQuery have system vars?Javascript / jQuery 是否有系统变量?
【发布时间】:2013-04-03 12:59:56
【问题描述】:

我注意到一个奇怪的问题。

看看这个 jQuery:

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

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

Fiddle

如您所见,输出为:

- 2

那么status 是 JavaScript 还是 jQuery 的系统变量?

还有其他类似的变量吗?

【问题讨论】:

标签: javascript jquery system-variable


【解决方案1】:

JavaScript 具有 全局 变量,在浏览器中,全局变量是 global object 的属性,即 window

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

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


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

(function() {
    var status = 'foo';
    // ....
}());

【讨论】:

  • 感谢您的回答。但并非所有这些变量都是只读的,对吧?我将其更改为 statusbar 并返回 1 - 2 jsfiddle.net/narekmarkosyan/4JrBK/5
  • 是否可以获得所有变量的列表以避免它们(以防我忘记将它们设为本地)?
  • 再次引用我自己的话:“您可以在MDN documentation中找到预定义属性的列表”
  • 嗯,正如我所说,这因浏览器而异。无论如何,您都应该避免覆盖其中任何一个。
【解决方案2】:

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

如果不使用var 关键字,您将覆盖此属性,因为您引用了window.status。显然,只要用户没有将 dom.disable_window_status_change 首选项设置为 false,Firefox 就不会让您更改此设置。

请参阅 this link 了解文档和 this one 了解所有“全局”属性的列表。

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

【讨论】:

  • 谢谢,保留字列表也是必须知道的。他们几乎总是由 IDE 突出显示,这真的很有帮助,而不是 var from question。右高亮会阻止这个问题。
  • 在上下文中使用保留关键字在大多数情况下都会引发语法错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2011-03-30
  • 1970-01-01
  • 2014-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多