JavaScript 内部函数作用域问题及解决方法

内部函数被调用时,this被绑定到全局对象,这是语言设计上的一个错误,若语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this变量。这个设计错误的后果是不能利用内部函数来帮助它完成工作,因为内部函数的this被banding了错误的值,所以不能共享该方法对对象的访问权。

如:

var value=20;//全局变量
var MyObject={value:10}//MyObject内部变量
MyObject.double=function(){

      var helper=function()//内部方法
    {
        alert(this.value);//显示20,而不是10
        //其他操作
    }
    helper();
}
MyObject.double();

如果希望访问外部函数的this,可以传递一个作用域变量进去

var value=20;//全局变量
var MyObject={value:10}//MyObject内部变量
MyObject.double=function(){

   var that=this;
      var helper=function()//内部方法
    {
        alert(that.value);//显示10
        //其他操作
    }
    helper();
}
MyObject.double();
原文地址:https://www.cnblogs.com/FlyCat/p/2633850.html