Home  >  Q&A  >  body text

javascript关于this对象,在闭包函数中为什么会引用全局变量

阿神阿神2653 days ago1075

reply all(14)I'll reply

  • PHP中文网

    PHP中文网2017-04-11 13:30:38

    JavaScript语言精粹说 这是一个设计缺陷

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 13:30:38

    @eyesofkids 的答案已经很完善了,建议采纳。

    ===========================================
                       下面是老答案
    ===========================================
    

    再来补充一种方式,通过 call 改变 this的方向,return function(){} 中还可以用 this。

    var name = "aa";
    var object = {
        name : "bb",
        getNameFunc : function(){
            return (function(){
                return this.name;
            }).call(this);
        }
    
    };
    
    alert(object.getNameFunc());

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 13:30:38

    this是在运行时绑定的。

    你这里调用对象的方法,最后返回一个函数,返回的函数是在全局作用域执行的,并且没有其他对象调用返回的函数,也没有使用new,call,apply,bind调用返回的函数。this在非严格模式下就指向window/global,在严格模式下就指向undefined

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-11 13:30:38

    要么把对象本地化(放在外部的函数内)要么把对象(this)传到返回的函数内

    reply
    0
  • Cancelreply