【发布时间】:2014-08-19 09:08:46
【问题描述】:
据我所知,在另一个函数中定义的函数说 A 说 B 也可以访问 B 的局部变量。
function B() {
var x = 10;
function A() {
console.log(x); //will result in 10
var y = 5;
}
console.log(y); //ReferenceError: y is not defined
}
但是在下面的例子中 y 被打印出来了。我知道“if 块”的 javascript 中没有块范围之类的东西,但声明至少应该在“if”之外不可见,我的意思是不应该将 var 限制为 if 块?
function B() {
var x = 10;
if(1) {
console.log(x); //will result in 10
var y = 5;
}
console.log(y); will result in 5
}
【问题讨论】:
-
答案就在问题中:“JavaScript 中没有块作用域之类的东西”
-
是否在javascript中阻止单独的闭包? - 不,它不是
-
@Cerbrus 我不确定块作用域和闭包概念之间的联系。我希望这个问题的答案也能解决这个问题。我很确定“是否在 javascript 中阻止单独的闭包?”是一个有效的问题,不需要被否决。我也很确定“是否在 javascript 中阻止单独的闭包?”不需要解释为“是否在 javascript 中阻止单独的块范围?”因为我想详细了解概念
-
@Fishy:块作用域就是这样,请参阅我的回答中的第一个 sn-p:循环有自己的作用域,在循环之外,在其中声明的变量根本不'不存在。闭包由外部无法访问的元素组成,除非通过闭包返回的内容(函数,对象......)。参考我的答案中的链接
-
是的,谢谢,很好的答案!!!除了您提到的返回对象/函数可以访问外部范围内的变量之外,我们还不能将以下概念视为闭包。 “函数中的任何变量都可以在该函数中定义的子函数中访问,但反之则不行”
标签: javascript