看《js设计模式》时,发现个问题...

https://img4.mukewang.com/5bc9c82f00010a0107000778.jpg

https://img1.mukewang.com/5bc9c8390001a76606680469.jpg

我看这里的时候 感觉有个很奇怪的地方:

var getSingle = function( fn ){    var result;    return function(){        
return result || ( result = fn .apply(this, arguments ) );
    }
};

在调用 getSingle的时候,每次调用 都会重新声明一个 var result 变量啊, 所以每次 result 都是个新的 空 呀,那后面的判断 就没意义了!!!是不是漏了个立即执行(function(){})() 来包裹一下呀?


慕斯709654
浏览 538回答 1
1回答

白猪掌柜的

嗯 这书我也看过 《JavaScript设计模式与开发实践》,单例模式那块儿。其实这是一个闭包的问题你看这一行var createSingleLoginLayer = getSingle(createLoginLayer)返回的这个 createSingleLoginLayer 函数始终引用了 result 变量。因此假设 无论是 createSingleLoginLayer(args1) 还是 createSingleLoginLayer(args2) 其实result 变量从来都是那个一开始那个 result .每次 result 不是空的。说到底,这就是个闭包的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript