JavaScript闭包上下文的其他属性会发生什么?

时间:2013-04-25 19:13:02

标签: javascript function closures

我会尽量在我的问题上尽可能清楚:

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

2 个答案:

答案 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")();