0

我会尽量清楚我的问题,所以:

有很多博客和教程解释了闭包,但我没有弄清楚创建闭包的上下文的其他属性会发生什么?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", "");
4

2 回答 2

2

在此示例中,没有创建上下文,因为函数 'func' 中的关键字 'this' 指的是窗口(全局对象)。

要创建上下文声明变量,如下所示:

var context_field = "context_field";
var context_method = function(){
    console.log("context method");
};
于 2013-04-25T19:28:53.390 回答
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")();
于 2013-04-25T20:06:03.793 回答