1.this指向window对象(因为匿名函数的执行具有全局性,所以其this对象指向window); 2.不能实现value加1(每个函数在被调用时都会自动取得两个特殊变量,this和arguments,内部函数在搜索这两个对象时,只会搜索到其活动对象为止,所以不能实现访问外部函数的this对象); 3.修改代码实现正确功能
<script>
{
var myNumber = {
value:1,
add: function(i){
var helper = function(i){
console.log(this);
this.value += i;
}
helper(i);
}
}
myNumber.add(1);
}
{
//第一种解决方法:
var myNumber = {
value:1,
add: function(i){
var that = this;
var helper = function(i){
console.log(that);
this.value += i;
}
helper(i);
}
}
myNumber.add(1);
}
{
//第二种解决方法:
var myNumber = {
value:1,
add: function(i){
var helper = function(i){
this.value += i;
}
helper.apply(this,[i]);
}
}
myNumber.add(1);
}
{
//第三种解决方法
var myNumber = {
value:1,
add: function(i){
var helper = function(i){
this.value += i;
}.bind(this,i);
helper(i);
}
}
myNumber.add(1);
}
</script>
预览效果