once 和 它牵扯出的this

在很多情况下,我们只需要运行一次给定的函数. 比如只想设置一次第三方库,或初始化一次支付设置.

_.once = (fn) =>{
        let done = false;
        return function (){
            return done ? undefined : ((done = true),fn.apply(this,arguments));
        }
    }

上面的once函数接受一个参数fn,并通过调用它的apply方法返回结果.此处注意的重点是,我们声明了一个名为done的变量,初始值为false.返回的函数会形成一个覆盖它的函数作用域.因此,返回的函数会访问并检查done是否为true,如果是,则返回undefined,否则将done设为true(这样就阻止了下一次执行)并用必要的参数调用函数fn

示例:

var doPayment = _.once(()=>{
    console.log("Payment is done");
})

doPayment();//Payment is done
doPayment();//undefined

这里我们要打个岔好好说说this了

Last updated