首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在声明Javascript变量时,var是必要的吗?

在声明Javascript变量时,var是必要的吗?
EN

Stack Overflow用户
提问于 2010-10-09 00:56:46
回答 6查看 22.8K关注 0票数 65

可能重复:

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";
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-09 00:59:11

如果没有使用varletconst声明变量(在当前作用域中显式创建它),那么(在非严格模式下)就会创建一个隐式全局变量。

全局变量是让不同的函数覆盖彼此变量的一种奇妙的方式(即,它们使代码维护起来很痛苦)。

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

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

Google Adsense使用全局变量,因为它将脚本分为两个截然不同的部分(一个是本地脚本,另一个是远程脚本)。一种更简洁的方法是调用在远程脚本中定义的函数,并将参数作为参数传递,而不是让它从全局作用域中提取参数。

现代JS应该用禁止隐式全局变量的strict mode编写(更倾向于在顶层显式声明它们,这样可以防止变量名输入错误时出现意外的全局变量)。

票数 114
EN

Stack Overflow用户

发布于 2010-10-09 01:05:08

是的,您应该始终使用var

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

  • 访问未在该函数中定义的函数中的变量将导致解释器查找具有该名称的变量的作用域链,直到找到一个变量或到达全局对象(在浏览器中可通过window访问)并在其中创建属性。此全局属性现在随处可用,这可能会导致混淆和难以检测bugs;
  • Accessing未声明的变量将在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
票数 11
EN

Stack Overflow用户

发布于 2010-10-09 00:59:14

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

对于全局变量,这并不重要,但您可能希望将其用于consistency.

  • Always,尝试使用‘’在局部函数中声明变量。它确保您使用的是变量的本地副本,而不是不同作用域中同名的另一个变量。

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

var myvar = 0;
function affectsGlobalVar(i){
   myvar = i;
}
function doesNotAffectGlobalVar(i){
   var myvar = i;
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3892696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档