javascript 中的全局和局部变量执行上下文

global and local variable execution context in javascript

试图理解 javascript 的基础知识,我 运行 进入以下代码,名为 "foo" 的变量的预期值将是 7 和 5,但结果是 7 和 7。不知道为什么....

var foo = 5;
(function Test() {
    foo = 7;
    console.log("foo=" + foo);
})();
console.log("foo=" + foo);

foo=7
foo=7

因为当您执行 foo = 7; 时,它会创建一个 全局变量 并将其设置为 7,即使函数完成后它仍然是 7.您可能希望它是一个局部变量:

(function Test() {
    var foo = 7;
    console.log("foo=" + foo);
})();

要获得 7 和 5,您需要在函数中的 "foo = 7;" 之前放置 "var",以防止它覆盖您在函数外声明的全局 foo。

也就是说,在函数内声明变量时需要使用 var 来使它们在函数的局部作用域内。

您正在声明一个全局变量,然后在您的函数中引用它。如果您想要局部变量,请使用 var 关键字在您的函数中声明它。

//foo variable definition here
var foo = 5;

(function Test() {
    //Referencing the already globally defined var.
    //Use var foo = 7 in order to define a new local var.
    foo = 7;
    console.log("foo=" + foo);
})();
console.log("foo=" + foo);

在立即调用的匿名方法中引用全局变量并不意味着它会覆盖全局范围内的变量!

类似foo=7 的内容只有在没有其他foo 可从当前范围访问时才会创建一个新变量。在这种情况下存在!

立即调用匿名函数并不是一个完全隔离的作用域。作为一个函数,它有一个局部作用域,在块外是不可用的。但它仍然可以访问全局范围。