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