是否使用'var'声明变量是可选的?
这个问题在这里已经有了答案:
他们的意思不同。 如果使用var
则变量在您所在的范围内声明(例如函数)。 如果你没有使用var
,变量会遍历整个范围层,直到它通过给定名称或全局对象(如果你正在浏览器中执行它的话,窗口)遇到一个变量,然后它将附着在变量上。 它与全局变量非常相似。 但是,它仍然可以通过删除来delete
(很可能由别人的代码也无法使用var
)。 如果在全局范围内使用var
,则该变量是真正的全局变量,不能被删除。
在我看来,这是javascript最危险的问题之一,应该被弃用,或者至少提出警告警告。 原因是,很容易忘记var
并且偶然会将一个公共变量名绑定到全局对象。 这会产生奇怪且难以调试的行为。
这是Javascript中棘手的部分之一,也是其核心功能之一。 用var
声明的变量“开始其生命”就在你声明它的地方。 如果你忽略了这个var
,就好像你正在谈论一个你之前使用过的变量。
var foo = 'first time use';
foo = 'second time use';
关于范围,变量自动变为全局是不正确的。 相反,Javascript会遍历范围链,看看你之前是否使用过这个变量。 如果它发现一个以前使用过的同名变量的实例,它将使用它以及它声明的任何范围。如果它没有在任何地方遇到该变量,它最终会触发全局对象(在浏览器中的window
)并将附加变量给它。
var foo = "I'm global";
var bar = "So am I";
function () {
var foo = "I'm local, the previous 'foo' didn't notice a thing";
var baz = "I'm local, too";
function () {
var foo = "I'm even more local, all three 'foos' have different values";
baz = "I just changed 'baz' one scope higher, but it's still not global";
bar = "I just changed the global 'bar' variable";
xyz = "I just created a new global variable";
}
}
与嵌套函数和回调一起使用时,这种行为非常强大。 了解什么functions
以及范围如何工作是Javascript中最重要的事情。
不,他们不是等同的。
用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”的值,但第一个函数不会。
链接地址: http://www.djcxy.com/p/17343.html