JavaScript - 调用之间的持久数据?

时间:2017-06-10 19:47:05

标签: javascript function persistence

我想用一个参数调用一个函数并存储该值,以便下次调用该函数时不带参数,它使用最后设置的参数。这可以用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
}

2 个答案:

答案 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();