2015-02-06 45 views
0

我看到这种模式最近这种模式是否将在if语句中声明的变量范围缩小为一种好的做法?

if(condition) { 
    (function() { 
     var foo = "bar"; 
     // do somehing with foo 
    })(); 
} 
// no more foo 

它看起来像一个黑客一点,我在想,如果这个模式的使用是一个很好的做法?

+1

不,这是非常奇怪的伊莫。立即调用的函数表达式通常仅用于模块模式或用于抵制奇怪的循环情况。 – Andy 2015-02-06 22:13:56

+1

函数内部是否还有一些功能在函数内部使用?像这样创建闭包确实会有所帮助,但这绝不是标准做法 – 2015-02-06 22:14:06

+1

您的问题需要一些背景知识。为什么你需要将'foo'限制在条件? – 2015-02-06 22:18:22

回答

0

,如果你想使用闭包来创建根据条件私有变量这可能是有用的。你会想可能分配出函数的返回值,但你可以使用此模式类似:

//conditionally check if we want a counting option  
if(counterIsEnabled){ 

//if we do, create a private count object 
var counterObject = (function(){ 
var count = 0; 

//and make it only accessible via a returned method 
return { 
     inc: function(){ count += 1; }, 
     get: function(){ return count} 

    } 

})(); 

} 

它本质上只是有条件地建立闭合,如果你想私有变量和公共这是有用的访问器/设置器方法来精确控制如何访问或更改该变量。

这样做就意味着没有人可以直接访问count变量,而无需使用您预先定义的方法。

相关问题