0
点赞
收藏
分享

微信扫一扫

setTimeout this指向问题

程序员知识圈 2021-09-29 阅读 125
日记本

今天的需求是防止多次提交请求------于是模拟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指向问题了。

举报

相关推荐

0 条评论