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

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();


幕布斯7119047
浏览 531回答 2
2回答

倚天杖

在MDN的文档中,你可以看到关于setTimeout 方法里 this 的指向这个问题,有这么一句话:由setTimeout()调用的代码运行在与所在函数完全分离的执行环境上。所以在&nbsp;console.log(this.escape(str))&nbsp;这里,this&nbsp;指向的是&nbsp;Window&nbsp;对象,而&nbsp;Window.escape()干的事情是这样的。所以,你的代码压根就没有调用你想调用的&nbsp;escape&nbsp;方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript