var是可选的吗?

myObj = 1;

和?

var myObj = 1;

我发现他们都工作从我的测试,我假设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

其他回答

这不仅仅是局部和全局的区别。使用var创建的全局变量与不使用var创建的全局变量不同。考虑一下:

var foo = 1; // declared properly
bar = 2; // implied global
window.baz = 3; // global via window object

根据到目前为止的答案,这些全局变量foo、bar和baz都是等价的。事实并非如此。使用var创建的全局变量被(正确地)分配了内部[[DontDelete]]属性,这样它们就不能被删除。

delete foo; // false
delete bar; // true
delete baz; // true

foo; // 1
bar; // ReferenceError
baz; // ReferenceError

这就是为什么你应该总是使用var,即使是全局变量。

不,它们不相等。

myObj = 1;您正在使用一个全局变量。

后一种声明在您使用的范围内创建一个局部变量。

尝试下面的代码来理解差异:

external = 5;
function firsttry() {
  var external = 6;
  alert("first Try: " + external);
}

function secondtry() {
  external = 7;
  alert("second Try: " + external);
}

alert(external); // Prints 5
firsttry(); // Prints 6
alert(external); // Prints 5
secondtry(); // Prints 7
alert(external); // Prints 7

第二个函数改变全局变量“external”的值,但第一个函数不会。

Var不允许程序员声明变量,因为Javascript没有变量。Javascript有对象。Var显式地向未定义的对象声明一个名称。赋值将一个名称作为句柄分配给已赋值的对象。

使用var告诉Javacript解释器两件事:

不使用委托反向遍历查找值的名称,而是使用此名称 不删除名字

省略var告诉Javacript解释器使用第一个找到的具有相同名称的对象的前一个实例。

Var作为关键字源于语言设计者的错误决定,就像Javascript作为名称源于错误决定一样。

ps.学习上面的代码示例。

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

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

myVar = 100;

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

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

var myVar = 100;

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

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

撇开范围不谈,它们可以用不同的方式使用。

console.out(var myObj=1);
//SyntaxError: Unexpected token var
console.out(myObj=1);
//1

语句和表达式