首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >说明全球范围

说明全球范围
EN

Stack Overflow用户
提问于 2016-11-06 16:01:07
回答 3查看 71关注 0票数 2

我在读你不知道JS -范围和闭包的书。

它说,你不应该污染全球范围。fooa正在污染全球范围。例如:

代码语言:javascript
复制
var a = 2;
function foo() {
    var a = 3;
    console.log( a ); // 3
}
foo(); 
console.log( a ); //2

对于这个例子,我想出了一幅图片(是学习的一部分)。

为了修复这个(污染),他说将代码包装在一个匿名函数中。

但是,我很难说明这一点。你能帮我做这个吗。说明这一点很重要。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-11-06 16:40:15

我希望这能帮到你。这是您的示例,另外还有一个匿名函数。

代码语言:javascript
复制
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部件,那么将使用外部作用域中的变量。

代码语言:javascript
复制
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);

票数 2
EN

Stack Overflow用户

发布于 2016-11-06 16:06:11

就像@拖延者建议的那样,把红色的'a‘和foo围起来,叫它匿名。

票数 0
EN

Stack Overflow用户

发布于 2016-11-06 16:06:55

你可以让它成为一种生活

代码语言:javascript
复制
(function foo() {
    var a = 3;
    console.log( a ); // 3
})();

 console.log( a )

希望这能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40451385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档