logOnce更高阶函数

时间:2015-03-16 16:15:07

标签: javascript

我想实现一个将另一个函数作为参数的函数,并返回一个只能调用一次的该函数的新版本。

第一个功能有效,但第二个功能不起作用。

为什么第二个函数不起作用,但是可以某种方式仍然可以在第一个函数内部没有函数的情况下访问该单词?

var logOnce = once(console.log)    

function once(fn) {
  var call = true;
  return function(word) {
    if(call) {
      call = false;
      return fn(word);
    }
  }
}

function once(fn) {
  var call = true;
  if (call === true) {
    call = false;
    return fn;
  }
}


logOnce("foo");   ----> "foo"
logOnce("blue");  ----> "blue"

1 个答案:

答案 0 :(得分:1)

您的第二种方法不起作用,因为它返回相同的fn。实际上,它相当于

function once(fn) {
    return fn;
}

因此,once(console.log)只是console.log,您可以根据需要多次调用它。

第一种方法有效,因为您返回不同的函数,该函数将根据变量调用原始函数。