var是可选的吗?
myObj = 1;
和?
var myObj = 1;
我发现他们都工作从我的测试,我假设var是可选的。对吗?
var是可选的吗?
myObj = 1;
和?
var myObj = 1;
我发现他们都工作从我的测试,我假设var是可选的。对吗?
当前回答
Javascript中的var关键字是有目的的。
如果你声明一个没有var关键字的变量,就像这样:
myVar = 100;
它变成了一个全局变量,可以从脚本的任何部分访问。如果你不是故意这样做的,或者没有意识到这一点,如果你在javascript的另一个地方重复使用变量名,它会给你带来痛苦。
如果你用var关键字来声明变量,就像这样:
var myVar = 100;
它是作用域的局部({]-括号,函数,文件,取决于你把它放在哪里)。
这是一种更安全的处理变量的方法。因此,除非你是故意这样做,尽量声明变量与var关键字,而不是没有。
其他回答
围绕着这个问题有太多的困惑,现有的答案没有一个能清晰直接地涵盖一切。下面是一些内联注释的例子。
//this is a declaration
var foo;
//this is an assignment
bar = 3;
//this is a declaration and an assignment
var dual = 5;
声明设置了一个DontDelete标志。作业则不然。
声明将该变量绑定到当前作用域。
赋值但未声明的变量将寻找要附加到的作用域。这意味着它将遍历范围的食物链,直到找到具有相同名称的变量。如果没有找到,它将被附加到顶层作用域(通常称为全局作用域)。
function example(){
//is a member of the scope defined by the function example
var foo;
//this function is also part of the scope of the function example
var bar = function(){
foo = 12; // traverses scope and assigns example.foo to 12
}
}
function something_different(){
foo = 15; // traverses scope and assigns global.foo to 15
}
为了非常清楚地描述发生了什么,本文对delete函数的分析广泛地涵盖了变量实例化和赋值。
不,这不是“必需的”,但如果你不这样做,可能会导致重大问题。不使用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)被视为全局对象的属性。(通常是窗口对象,除非你在with块中)
用var声明的变量是正常的局部变量,在声明它们的函数之外是不可见的。(注意Javascript没有块作用域)
更新:ECMAScript 2015
let是在ECMAScript 2015中引入的,具有块作用域。
想想今天在StackOverflow上被问到的这个问题:
简单的Javascript问题
上面的场景是一个很好的测试和一个实际的例子…… 开发人员在他的一个变量中使用了JavaScript函数的名称。
代码有什么问题? 该代码仅在用户第一次单击按钮时起作用。
解决方案是什么? 在变量名之前添加var关键字。