once.js 558 B

12345678910111213141516171819202122232425
  1. var slice = require('./slice')
  2. /**
  3. * 创建一个只能调用一次的函数,只会返回第一次执行后的结果
  4. *
  5. * @param {Function} callback 函数
  6. * @param {Object} context 上下文
  7. * @param {*} args 额外的参数
  8. * @return {Object}
  9. */
  10. function once (callback, context) {
  11. var done = false
  12. var rest = null
  13. var args = slice(arguments, 2)
  14. return function () {
  15. if (done) {
  16. return rest
  17. }
  18. rest = callback.apply(context, slice(arguments).concat(args))
  19. done = true
  20. return rest
  21. }
  22. }
  23. module.exports = once