使用“var”声明变量是可选的吗?

7 浏览
0 Comments

使用“var”声明变量是可选的吗?

这个问题已经有答案了:

什么是var关键字的目的,我什么时候应该使用它(或省略它)?

\"var\"是可选的吗?

myObj = 1;

同样的吗?

var myObj = 1;

我发现从我的测试中他们都可以使用,我假设var是可选的。是这样的吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

这是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";
    }
}

当与嵌套函数和回调一起使用时,这种行为非常强大。学习什么是函数以及作用域如何工作是Javascript中最重要的事情。

0
0 Comments

它们的意思是不同的。
如果你使用var,变量就在你所在范围内声明(例如函数的范围)。如果不使用var,变量则一直冒泡到遇到同名变量或全局对象(在浏览器中为window)为止,然后附加在变量上。这时它就非常类似于全局变量。但是,它仍然可以使用delete删除(可能是由其他人的代码删除,他们也没有使用var)。如果您在全局范围内使用var,变量确实是全局的,也不能被删除。

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

0