为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森卡 2019-06-25 16:32:46
使用‘var’声明变量是可选的吗?“var”是可选的吗?myObj = 1;和你一样?var myObj = 1;我发现他们都在我的测试中工作,我想var是可选的。是那么回事吗?
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

它们意味着不同的东西。如果你用var变量是在您所在的范围内声明的(例如函数)。如果你不使用var,该变量在作用域的各个层中冒泡,直到通过给定的名称或全局对象(如果在浏览器中进行此操作的窗口)遇到变量,然后将其附加到其中。那就是非常相似一个全局变量。但是,它仍然可以用delete(很可能是其他人的代码也没有使用var)。如果你用var在全局范围内,变量是真正的全球性不能删除。

在我看来,这是javascript中最危险的问题之一,应该被废弃,或者至少对警告提出警告。原因是很容易忘记var并意外地将公共变量名绑定到全局对象。这会产生奇怪且难以调试的行为。


查看完整回答
反对 回复 2019-06-25
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

这是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中最重要的事情。


查看完整回答
反对 回复 2019-06-25
?
HUH函数

TA贡献1836条经验 获得超4个赞

不,它们不是等价物。

带着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

第二个函数改变全局变量“外部”的值,但第一个函数没有。


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 420 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信