setTimeout this指向问题

2019-04-24  本文已影响0人  MAYDAY77

今天的需求是防止多次提交请求------于是模拟ajax异步请求,用setTimeout代替,更改标识,

submit(){

    if (!this.submitFlag) {

           console.log(this.submitFlag + '点击了没提交');

           this.submitFlag = true;

           setTimeout(function(){

                this.submitFlag = false;

                console.log(this.submitFlag + '成功,可再次提交');

          }, 2000);

            console.log(this.submitFlag + '输出submitFlag');

    }

}

输出结果为:

false 点击了没提交

false 成功,可再次提交

true 输出submitFlag

期望的结果应该是 false 输出submitFlag才对;

后来改为用箭头函数来书写,便没有问题。

 setTimeout(() => {

        this.submitFlag = false;

        console.log(this.submitFlag + '成功,可再次提交');

    }, 2000);

后来想想,怎么能范低级错误呢,setTimeout es5的书写方法里的this指向全局作用域;而es6中箭头函数修复了this指向,就不存在this指向问题了。

上一篇下一篇

猜你喜欢

热点阅读