在回调函数中理解'this'关键字

3
我有这段代码。
var a = ["a","a"]
a.name = "a"

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

结果未定义,我想知道在这种情况下'this'指的是什么,以及我该怎么做才能使'this.name'实际上输出某些内容而不是undefined?

1个回答

5
阅读MDN上Array#filter文档以了解为什么this是未定义的:

arr.filter(callback[, thisArg])

如果向过滤器提供了thisArg参数,则在调用时,它将传递给回调函数,用作其this值。否则,将传递值undefined以用作其this值。最终由回调函数观察到的this值是根据确定函数所看到的this的通常规则来确定的。

需要通过第二个参数显式设置thisArg,给Array#filter提供一个上下文:
function unique(arr){
    arr.filter(function(e){
        console.log(this.name);
    }, arr);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接