我正在阅读你不知道JS - 范围和闭包的书。
它说,你不应该污染全球范围。 foo 和 a 正在污染全球范围。例如:
var a = 2;
function foo() {
var a = 3;
console.log( a ); // 3
}
foo();
console.log( a ); //2
在这个例子中,我想出了一张图片(学习的一部分)。
用于修复此问题(污染),他说将代码包装在一个匿名函数中。
但是,我有问题说明这一点。你能帮我这个吗?说明它很重要。
答案 0 :(得分:1)
我希望这会有所帮助。这是另外具有匿名功能的示例。
var a = 2;
console.log("global (start):", a); //2
(function() {
var a = 42;
console.log("inside anonimous function (start):", a); //42
function foo() {
var a = 3;
console.log("inside foo():", a); //3
}
foo();
console.log("inside anonimous function (end):", a); //42
})()
console.log("global (end):", a); //2
图像并不是最好的,但我希望它能说明示波器是如何嵌套的。
因此,您可以看到每个范围都有自己的变量a
,并且不会触及其余部分。这是因为每个都使用var a
来声明它。如果省略var
部分,则将使用外部作用域中的变量
var foo = 1;
console.log("global (start)", foo);
function bar() {
console.log("inside bar(), before modification:", foo);
foo = 7;
console.log("inside bar(), after modification:", foo);
}
bar();
console.log("global (end)", foo);
答案 1 :(得分:0)
正如@procrastinator建议的那样,包围红色'a'和foo并将其称为匿名
答案 2 :(得分:0)
你可以把它变成IIFE
(function foo() {
var a = 3;
console.log( a ); // 3
})();
console.log( a )

希望这有帮助