"var“是可选的吗?
myObj = 1;
跟什么一样?
var myObj = 1;
我在测试中发现它们都可以工作,我认为var
是可选的。是那么回事吗?
发布于 2010-03-21 09:16:32
不,它们不是等价的。
在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“的值,但第一个函数不会。
发布于 2013-04-13 20:53:47
围绕这个主题有太多的困惑,而且现有的答案中没有一个清楚而直接地涵盖了一切。下面是一些带有内联注释的示例。
//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
}
为了清楚地描述正在发生的事情,此analysis of the delete function广泛地介绍了变量实例化和赋值。
发布于 2014-06-11 02:23:31
看看这个提琴: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
https://stackoverflow.com/questions/2485423
复制相似问题