【问题标题】:Is var necessary when declaring Javascript variables? [duplicate]声明 Javascript 变量时需要 var 吗? [复制]
【发布时间】:2011-04-23 00:05:57
【问题描述】:

可能重复:
Javascript: is using 'var' to declare variables optional?

在javascript中创建变量时必须在变量名前添加“var”吗?

例如代替

var message = "Hello World!"

我可以用吗

message = "Hello World!"

?

我注意到像 Google Adsense 这样的脚本不使用 var

例子:

google_ad_width = 160;
google_ad_height = 600;
google_color_border = "000000";
google_color_bg = "ffffff";

【问题讨论】:

标签: javascript variables


【解决方案1】:

将 Google AdSense 添加到您的网页时,您会链接许多 javascript 文件。变量在那里定义。

http://pagead2.googlesyndication.com/pagead/show_ads.js 应该是您页面中的脚本引用之一。

【讨论】:

    【解决方案2】:

    没有 var 变量被定义为全局变量。

    【讨论】:

      【解决方案3】:

      如果您不使用 varletconst 声明变量(在当前范围内显式创建),那么(在非严格模式下)您将创建一个隐式全局变量。

      全局变量是一种让不同函数覆盖彼此变量的绝妙方法(即它们使代码难以维护)。

      如果您使用var,则变量的范围仅限于当前函数(以及其中的任何内容——可以嵌套函数)。

      constlet 将常量和变量作用于当前块而不是函数,这通常使变量比var 更容易管理。)

      Google Adsense 使用全局变量,因为它将脚本分成两个不同的部分(一个本地和一个远程)。更简洁的方法是调用远程脚本中定义的函数并将参数作为参数传递,而不是让它从全局范围中获取它们。


      现代 JS 应该用strict mode 编写,它禁止隐式全局变量(宁愿在顶层显式声明它们,从而防止在变量名输入错误时意外全局变量)。

      【讨论】:

        【解决方案4】:

        来自http://www.updrift.com/article/to-var-or-not-to-var-my-javascript

        1. 对于全局变量,这无关紧要,但您可能希望使用它来保持一致性。
        2. 始终尝试使用“var”在局部函数中声明变量。它确保您使用的是变量的本地副本,而不是另一个范围内的同名变量。

        例如,这里的两个相似的函数有非常不同的效果:

        var myvar = 0;
        function affectsGlobalVar(i){
           myvar = i;
        }
        function doesNotAffectGlobalVar(i){
           var myvar = i;
        }
        

        【讨论】:

          【解决方案5】:

          对于像我这样的未悟者, JavaScript 基本上有两个作用域 对于变量:全局和局部。 在 a 之外分配的变量 函数是全局的,变量 在函数内部分配,使用 var 关键字,是本地的(不是火箭 手术)。但是,如果您离开 var 关键字关闭,它分配一个全局 变量,不管它在哪里 声明。

          发件人:http://opensoul.org/2008/9/4/the-importance-of-var-in-javascript

          【讨论】:

          • 非常基本地说,这是正确的。但是,可以有嵌套的本地范围。在另一个函数内部的函数中声明的 var 不能被父函数访问。
          【解决方案6】:

          是的,您应该始终使用var

          不使用var有两个主要缺点:

          • 访问未在该函数中定义的函数内的变量将导致解释器查找具有该名称的变量的作用域链,直到找到一个变量或它到达全局对象(在浏览器中可通过 @ 访问987654323@) 它将在其中创建一个属性。此全局属性现在随处可用,可能会导致混淆和难以检测的错误;
          • 在 ECMAScript 5 严格模式下访问未声明的变量会导致错误。

          另外,不使用var作为全局变量与使用var并不完全相同:使用var时,它在全局对象上创建的属性具有内部DontDelete属性,这不是没有var的情况:

          // Next line works in any ECMAScript environment. In browsers, you can
          // just use the window object.
          var globalObj = (function() { return this; })();
          
          var x = 1;
          delete globalObj.x;
          alert(x); // Alerts 1, x could not be deleted
          
          y = 2;
          delete globalObj.y;
          alert(y); // Error, y is undefined
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-29
            • 1970-01-01
            • 1970-01-01
            • 2012-10-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多