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

时间:2015-02-09 18:07:19

标签: javascript variables global local

尝试理解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

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

要得到7和5,你需要在“foo = 7;”之前加上“var”。在你的函数中,以防止它覆盖你在函数外声明的全局foo。

也就是说,在函数中声明变量时需要使用var,以使它们在本地作用于函数。

答案 2 :(得分:0)

您正在声明一个全局变量,然后在您的函数内引用它。如果你想要一个局部变量,请使用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);

答案 3 :(得分:0)

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

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

立即调用匿名函数不是一个完全孤立的范围。作为一个函数,它有一个局部范围,在块外不可用。但它仍然可以进入全球范围。