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