if块在javascript中是一个单独的闭包吗
据我所知,一个函数,比如在另一个函数中定义的a,也就是说B可以访问B的局部变量if块在javascript中是一个单独的闭包吗,javascript,Javascript,据我所知,一个函数,比如在另一个函数中定义的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被打印出来。我知道javasc
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被打印出来。我知道javascript中没有“if block”的块作用域,但声明是否至少应该在“if”之外不可见?我的意思是,变量y不应该被限制为if block
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并不是真正的块范围。
if
或for
循环没有自己的作用域。任何给定范围(即:全局范围或函数)中的所有变量声明都将被提升,并且在该范围内的任何位置都可见。ECMAScript 6(Harmony)很可能会通过使用新的
let
关键字将块范围引入JS:
话虽如此:不过,您可以通过使用闭包来模拟块范围的循环。函数是有作用域的,闭包是函数返回的函数或对象。这意味着函数的返回值可以访问整个函数的作用域
应用此处解释的内容,并找出此循环为何为“伪作用域”:
var foo=[1,2,3,4,5,6],
largerThan3=(函数(arr)
{
var resultar=[];
对于(变量i=0;变量i=3)
结果推(arr[i]);
}
返回结果器;
}(foo);;
控制台日志(i)//参考错误。。。
JavaScript不是真正的块范围。if
或for
循环没有自己的作用域。任何给定范围(即:全局范围或函数)中的所有变量声明都将被提升,并且在该范围内的任何位置都可见。ECMAScript 6(Harmony)很可能会通过使用新的
let
关键字将块范围引入JS:
话虽如此:不过,您可以通过使用闭包来模拟块范围的循环。函数是有作用域的,闭包是函数返回的函数或对象。这意味着函数的返回值可以访问整个函数的作用域
应用此处解释的内容,并找出此循环为何为“伪作用域”:
var foo=[1,2,3,4,5,6],
largerThan3=(函数(arr)
{
var resultar=[];
对于(变量i=0;变量i=3)
结果推(arr[i]);
}
返回结果器;
}(foo);;
控制台日志(i)//参考错误。。。
没有。
正如您所说——如果块在JS中没有自己的闭包——这意味着所有东西都是外部闭包的一部分(在本例中,y是B闭包中的局部变量)。所以它会在B的身体里完全可见。
正如您所说——如果块在JS中没有自己的闭包——这意味着所有东西都是外部闭包的一部分(在本例中,y是B闭包中的局部变量)。因此它将在B的主体中完全可见答案是这样的问题:“JavaScript中没有块作用域”是不是在JavaScript中块是一个单独的闭包没有not@Cerbrus我不确定块范围和闭包概念之间的联系。我希望这个问题的答案也能解决这个问题。我非常确定“如果在javascript中阻止一个单独的闭包吗?”是一个有效的问题,不需要否决。我也非常确定“if block在javascript中是一个单独的闭包吗?”不需要解释为“if block在javascript中是一个单独的块范围吗?”因为我想理解details@Fishy:block scope就是它,请参见我答案中的第一个片段:循环有自己的作用域,在循环之外,其中声明的变量根本不存在。闭包由从ouside无法访问的元素组成,除非通过闭包返回的内容(函数、对象…)。Cf在我的回答中的链接是的,谢谢,很好的回答!!!我们不能把下面的概念也看作是闭包,除了你提到的,返回的对象/函数可以访问外部范围的变量。“一个函数中的任何变量都可以通过该函数中定义的子函数访问,但不能通过相反的方式访问”答案是这样的:“JavaScript中没有块作用域”是不是块在JavaScript中是一个单独的闭包没有not@Cerbrus我不确定块范围和闭包概念之间的联系。我希望这个问题的答案也能解决这个问题。我非常确定“如果在javascript中阻止一个单独的闭包吗?”是一个有效的问题,不需要否决。我也非常确定“if block在javascript中是一个单独的闭包吗?”不需要解释为“if block在javascript中是一个单独的块范围吗?”因为我想理解details@Fishy:block scope就是它,请参见我答案中的第一个片段:循环有自己的作用域,在循环之外,其中声明的变量根本不存在。闭包由从ouside无法访问的元素组成,除非通过闭包返回的内容(函数、对象…)。Cf在我的回答中的链接是的,谢谢,很好的回答!!!我们不能把下面的概念也看作是闭包,除了你提到的,返回的对象/函数可以访问外部范围的变量。“函数中的任何变量都可以通过该函数中定义的子函数访问,但不能通过相反的方式访问”
for (let i=0;i<12;++i)
{
console.log(i);//logs i
}
console.log(i);//reference error
var someClosure = (function()
{//this function creates a scope
var x = 123;
return {
getX: function()
{
return x;
},
setX: function(val)
{
return x = val;
}
};
}());
console.log(x);//reference error
console.log(someClosure.getX());//returns 123, so "x" still exists
var foo = [1,2,3,4,5,6],
largerThan3 = (function(arr)
{
var resultArr = [];
for (var i=0;i<arr.length;++i)
{
if (arr[i] > 3)
resultArr.push(arr[i]);
}
return resultArr;
}(foo));
console.log(i);//reference error...