我会尽量在我的问题上尽可能清楚:
有许多博客和教程可以解释闭包,但是我无法弄清楚的是,从创建闭包的上下文的其他属性会发生什么? jsFiddle
function func(){
this.context_field = "context_field";
this.context_method = function(){
console.log("context method");
};
func = function(param, change){
if(typeof(change) === 'undefined'){
//......
console.log(param + " " + context_field + " from original func - closure\n\n");
//.....
}
return func;
};
func()("Init finished and call");
func("Call again", "");
答案 0 :(得分:2)
在这个例子中没有创建上下文,因为函数'func'中的关键字'this'指的是window(全局对象)。
创建一个上下文声明vars,如下所示:
var context_field = "context_field";
var context_method = function(){
console.log("context method");
};
答案 1 :(得分:0)
因此,创建闭包的上下文的其他属性是活动的,可以在闭包内部调用,但是在外部可以使用它们的唯一方法是返回它们。
function func(){
var context_field = "context_field";
var context_method = function(){
console.log("context method lives on");
};
func = function(param){
console.log(param + " func and " + context_field);
return context_method;
}
return func;
};
func()("Init finished and call");
func("Call again")();