美文网首页
setTimeout this指向问题

setTimeout this指向问题

作者: MAYDAY77 | 来源:发表于2019-04-24 14:48 被阅读0次

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

    相关文章

      网友评论

          本文标题:setTimeout this指向问题

          本文链接:https://www.haomeiwen.com/subject/sgrggqtx.html