为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码的输出结果为什么是"aa","aaa","aaaa",而不是"ba","baa"

这段代码的输出结果为什么是"aa","aaa","aaaa",而不是"ba","baa"

幕布斯7119047 2019-02-25 13:31:10
var obj = {        escape: function (str) {            return str.replace("a", "b");        },                func: function () {                    for (var i = 0; i < 3; ++i) {                var str = "a";                setTimeout(function () {                    str = str + "a";                    console.log(this.escape(str));                }, i * 1000);            }                    }            };    obj.func();
查看完整描述

2 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

在MDN的文档中,你可以看到关于setTimeout 方法里 this 的指向这个问题,有这么一句话:

由setTimeout()调用的代码运行在与所在函数完全分离的执行环境上。

所以在 console.log(this.escape(str)) 这里,this 指向的是 Window 对象,而 Window.escape()干的事情是这样的。

所以,你的代码压根就没有调用你想调用的 escape 方法。


查看完整回答
反对 回复 2019-03-06
  • 2 回答
  • 0 关注
  • 530 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信