使用‘var’声明变量是可选的吗?

使用‘var’声明变量是可选的吗?

“var”是可选的吗?

myObj = 1;

和你一样?

var myObj = 1;

我发现他们都在我的测试中工作,我想var是可选的。是那么回事吗?


慕森卡
浏览 435回答 3
3回答

千万里不及你

它们意味着不同的东西。如果你用var变量是在您所在的范围内声明的(例如函数)。如果你不使用var,该变量在作用域的各个层中冒泡,直到通过给定的名称或全局对象(如果在浏览器中进行此操作的窗口)遇到变量,然后将其附加到其中。那就是非常相似一个全局变量。但是,它仍然可以用delete(很可能是其他人的代码也没有使用var)。如果你用var在全局范围内,变量是真正的全球性不能删除。在我看来,这是javascript中最危险的问题之一,应该被废弃,或者至少对警告提出警告。原因是很容易忘记var并意外地将公共变量名绑定到全局对象。这会产生奇怪且难以调试的行为。

人到中年有点甜

这是Javascript的一个棘手部分,也是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中最重要的事情。

HUH函数

不,它们不是等价物。带着myObj = 1;您使用的是全局变量。后一个声明创建了一个局部变量,该变量位于您正在使用的范围内。尝试使用以下代码来理解差异:external = 5;function firsttry() {   var external = 6;   alert("first Try: " + external);}function secondtry() {   external = 7;   alert("second Try: " + external);}alert(external); // Prints 5firsttry(); // Prints 6alert(external); // Prints 5secondtry(); // Prints 7alert(external); // Prints 7第二个函数改变全局变量“外部”的值,但第一个函数没有。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript