var getSingle=function(fn){
var result;
return function(){
return result || (result=fn.apply(this,arguments));
}
}
这是一个单例封装代码:
两个疑问:
a、在匿名函数的返回中,要返回result || (result=fn.apply(this,arguments)),但是它
并没有一个判断,比如:
var obj;
if(!obj){
obj=xxx;
}
到底要返回哪个呢?还是说哪个值存在,就返回哪个?
b、result=fn.apply(this,arguments)这个apply方法用在这里没看懂是啥意思,还请大神解惑?
谢谢!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
上面使用一个变量result来保存fn的计算结果。result变量因为身在闭包中, 它永远不会被销毁. 在将来的请求中, 如果result已经赋值, 那么它将返回这个值.
a:
js 逻辑或的返回值不一定是布尔值 ,如果 first 值为真,返回 first ,否则返回 second 。
b:
这里不调用 apply ,函数内的 this 会指向 global/window ,调用后则指向返回的匿名函数的 this 。目的可能是为传入的 constructor 函数绑定正确的运行环境,没给用法例子不多瞎猜了。
疑问1:首次调用getSingle方法时执行 (result=fn.apply(this,arguments)) 并返回result;
第二次及以后调用getSingle方法,优于result一直保存在内存中,所以不必执行(result=fn.apply(this,arguments)),而直接返回result;
疑问2:这里使用apply应该只是为了绑定运行时环境。
有不正确的地方欢迎指正。谢谢!