JS中,函数A ,return 出函数B,请问函数A和B的作用域是什么关系?是上下级关系还是平行关系?
比如在学习闭包的时候,常常会遇到这样的例子:
function a(){
var x=10;
return function b(){
x++;
alert("x为:"+x);
}
}
显然在这种情况下,b()是a()的下级作用域,才能访问a()中的变量x。
而我目前理解的是:
函数A return出的函数B,它们的作用域是平行关系。
a()像我们的肚子,如果b()在肚子里面,那么b()确实是a()的下级作用域。但是现在b()被a()return出来了,就像从肚子里面排遗出来一样,那么b()就从a()中脱离出来了,所以我目前认为它们是平行关系。
因为还有个例子是这样的:
var name="大王";
var obj={
name="小王";
getName:function(){
return function(){
return this.name;
}
}
};
var ele=obj.getName();//function(){return this.name;};
alert(ele());//大王
//或者用
alert(obj.getName()());//大王
这个例子里面obj.getName() --> return出来的函数就是全局函数。
你看这里,对象的方法也是函数对不对?但这个例子就说明它return出来的函数不在这个方法的作用域里面,而是和对象平行的作用域。
所以很疑惑,请各位大神讲解讲解!
相关分类