Web前端之路

JS如何使函数只执行一次——闭包法✌️

2019-12-11  本文已影响0人  forJavascript

思路

要保证一个函数只能调用一次,必须有个flag变量判断函数是否被调用。这个变量按理说是个全局变量,但是我不希望这个flag污染全局变量池,由此我想到了使用闭包。

function once(fn) {
  var flag = false
  return function() {
    if(!flag) {
      flag = true
      fn.call(this,...arguments)
    }
  }
}

let fn = function(m, n) {
  console.log(m + n)
}

let a = once(fn)

a(2,3) // 5
a(3,4) // 不会执行打印

总结

这样写的好处是flag变量不会污染全局变量痴。但是相对而言,其实called变量在函数once()中,前者属于后者的全局变量。这涉及到了闭包的作用域链,可自行搜索。

上一篇 下一篇

猜你喜欢

热点阅读