2013-04-25 47 views
0

我会尽力在我的问题上尽可能清楚如此:JavaScript闭包上下文的其他属性会发生什么?

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

您是否明白'this'是'window'(假设非严格模式)? – apsillers 2013-04-25 19:15:10

回答

2

在这个例子中没有创建的上下文,这是因为关键词“这个”在函数内部“FUNC”指的是窗口(全局对象)。

创建上下文声明瓦尔这样的:

var context_field = "context_field"; 
var context_method = function(){ 
    console.log("context method"); 
}; 
+0

所以context_field和context_method保持私有,只能在该上下文中使用,除非我明确地在内部匿名函数中替换'func'返回context_method [updated_code](http://jsfiddle.net/bogdan_vq/Uea6G/ 1 /) – 2013-04-25 19:43:51

+0

在我的第一个变体中,我知道,有一个上下文,但是窗口上下文或我可能是错的? – 2013-04-25 19:47:00

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")(); 
相关问题