我想用一个参数调用一个函数并存储该值,以便下次调用该函数时不带参数,它使用最后设置的参数。这可以用JavaScript吗?
编辑:这里有关于我正在努力实现的更多信息...
var track = 0;
$.getJSON('songsMetadata.json', function(data){
appendData(data);
});
player.bind("ended", function(){
track++
appendData();
});
function appendData(data){
/* Here I want to populate
the inside 'data' argument
only once (in the callback of
getJSON) and use that same
data in the 'player.bind'
callback */
//Some code to append data[track] to an HTML list
}
答案 0 :(得分:2)
您需要保留对封闭范围中最后一个可接受参数的引用。例如:
var ref;
function foo (arg) {
if (!arg) { // or arg === undefined if you want to be safe
arg = ref;
} else {
ref = arg;
}
// actual function behavior here
console.log(arg);
}
foo(); // undefined
foo(2); // 2
foo(); // 2
foo(3); // 3
foo(); // 3
如果要重复此行为,可能需要考虑编写包装函数来缓存接受函数的参数。例如:
function cacheFn (fn) {
var ref;
return function (arg) {
if (!arg) {
arg = ref;
} else {
ref = arg;
}
return fn(arg);
}
}
function foo (arg) {
console.log(arg);
}
var cachedFoo = cacheFn(foo);
cachedFoo(2);
cachedFoo();
cachedFoo(3);
cachedFoo();
答案 1 :(得分:1)
以更一般的方式:
function enclose(func){
var args=[];
return function(...passed){
args=passed.length?passed:args;
func(...args);
};
}
Usecases:
var log=enclose(console.log.bind(console));
log(5,1);
log();