var是可选的吗?

myObj = 1;

和?

var myObj = 1;

我发现他们都工作从我的测试,我假设var是可选的。对吗?


当前回答

想想今天在StackOverflow上被问到的这个问题:

简单的Javascript问题

上面的场景是一个很好的测试和一个实际的例子…… 开发人员在他的一个变量中使用了JavaScript函数的名称。

代码有什么问题? 该代码仅在用户第一次单击按钮时起作用。

解决方案是什么? 在变量名之前添加var关键字。

其他回答

Var是可选的。Var将变量置于局部作用域。如果一个变量在定义时没有使用var,那么它是在全局作用域中,是不可删除的。

edit

我认为不可删除的部分在特定的环境下在某个时间点是正确的。我一定是在做梦。

Javascript中的var关键字是有目的的。

如果你声明一个没有var关键字的变量,就像这样:

myVar = 100;

它变成了一个全局变量,可以从脚本的任何部分访问。如果你不是故意这样做的,或者没有意识到这一点,如果你在javascript的另一个地方重复使用变量名,它会给你带来痛苦。

如果你用var关键字来声明变量,就像这样:

var myVar = 100;

它是作用域的局部({]-括号,函数,文件,取决于你把它放在哪里)。

这是一种更安全的处理变量的方法。因此,除非你是故意这样做,尽量声明变量与var关键字,而不是没有。

I just found the answer from a forum referred by one of my colleague. If you declare a variable outside a function, it's always global. No matter if you use var keyword or not. But, if you declare the variable inside a function, it has a big difference. Inside a function, if you declare the variable using var keyword, it will be local, but if you declare the variable without var keyword, it will be global. It can overwrite your previously declared variables. - See more at: http://forum.webdeveloperszone.com/question/what-is-the-difference-between-using-var-keyword-or-not-using-var-during-variable-declaration/#sthash.xNnLrwc3.dpuf

看看这个Fiddle: http://jsfiddle.net/GWr6Z/2/

function doMe(){

a = "123"; // will be global
var b = "321"; // local to doMe
alert("a:"+a+"  --  b:"+b);

b = "something else"; // still local (not global)
alert("a:"+a+"  --  b:"+b);

};


doMe()
alert("a:"+a+"  --  b:"+b); // `b` will not be defined, check console.log

想想今天在StackOverflow上被问到的这个问题:

简单的Javascript问题

上面的场景是一个很好的测试和一个实际的例子…… 开发人员在他的一个变量中使用了JavaScript函数的名称。

代码有什么问题? 该代码仅在用户第一次单击按钮时起作用。

解决方案是什么? 在变量名之前添加var关键字。