现在我正在调用data()
函数,它将创建一个局部变量x
并返回与obj
函数和new
关键字一起创建的对象,该关键字具有属性{{1其值为另一个函数。那么为什么返回fun
方法不能访问闭包fun
?
x
现在我们不是创建新对象,而是放置相同的对象并返回它。
现在它可以访问关闭var obj=function(){
this.fun=function(){
console.log(x);
};
};
var data=function(){
var x=5;
return new obj();
};
var y=data();
y.fun();
。为什么?
x
答案 0 :(得分:3)
闭包的范围取决于创建的功能。
// It has access to any x in this scope
var obj=function(){
// It has access to any x in this scope
this.fun=function(){
// It has access to any x in this scope
console.log(x);
};
};
...但你在这里定义了X:
var data=function(){
// New scope here and none of the earlier code has access to it
var x=5;
return new obj();
};
...只有函数表达式或声明在里面的函数你可以访问{匿名函数表达式x
。
您可以将x
作为参数传递给obj
。
答案 1 :(得分:1)
因为在第二个示例中,函数是在与变量相同的范围内创建的,因此可以访问它。在第一个示例中,定义函数时不存在x。