2015-08-17 27 views
3

我有这样的代码理解“这”在回调函数

var a = ["a","a"] 
a.name = "a" 

unique(a) 
function unique(arr){ 
    arr.filter(function(e){ 
     console.log(this.name) // undefined 
    }) 
} 

的结果是不确定的,我想知道什么是“本”指的是在这种情况下,我可以做,使“这算什么。名称“实际上打印的东西,而不是未定义?

回答

5

阅读documentation for Array#filter on MDN理解为什么this未定义:

arr.filter(回调[,thisArg])

如果thisArg参数提供给滤波器,它会被传递到回调的时候被调用,用作其值。否则,未定义的值将被传递以用作其值。通过回调最终可观察到的这个值是根据用于确定函数所见的通常规则来确定的。

您需要通过通过第二个参数给Array#filter上下文设置thisArg明确:

function unique(arr){ 
    arr.filter(function(e){ 
     console.log(this.name); 
    }, arr); 
}