function myFunc(inputFunc){
var called = false;
return function() {
if (!called) {
called = true;
var storedResult = inputFunc();
return storedResult;
}
else
return storedResult;
};
}
在上面的代码中,我不明白它在函数中返回if-else语句的目的是什么。如果我只是改为以下内容,那会不会产生同样的效果?
function myFunc(inputFunc){
var called = false;
if (!called) {
called = true;
var storedResult = inputFunc();
return storedResult;
}
else
return storedResult;
}
答案 0 :(得分:4)
不会是一样的......
实际上,外部函数返回一个函数,将被调用的变量包含在它的作用域中,以便以后的调用不会改变。 以下是第一个代码段的工作原理
var instance = inputFunc();
var storedResult = instance(); // returns the result
var runItAgain = instance(); // probably returns `undefined`
你的第二个版本不会做任何一个,它只是
var storedResult = inputFunc(); // result
var runItAgain = inputFunc(); // result again, the "called" variable is always false
换句话说,第一个版本返回结果一次,只返回一次,这里是一个片段
function myFunc(inputFunc) {
var called = false;
return function() {
if (!called) {
called = true;
var storedResult = inputFunc();
return storedResult;
} else
return storedResult;
};
}
var instance = myFunc(function() {
return 'result';
});
var log = [];
log.push( instance() ); // result
log.push( instance() ); // undefined
log.push( instance() ); // undefined
log.push( instance() ); // undefined
document.body.innerHTML = '<pre>' + JSON.stringify(log, null, 4) + '</pre>';
&#13;