我有一个数组迭代器函数:
function applyCall(arr, fn) {
fn.call(arr[0], 0, arr[0]);
}
和一些代码
var arr1 = ['blah'];
applyCall(arr1, function (i, val) {
alert(typeof this); // object WHY??
alert(typeof val); // string
alert(typeof(this === val)) // alerts false, expecting true
});
为什么typeof this
在内联函数object
而不是string
中?
jsfiddle here
答案 0 :(得分:8)
在JavaScript中调用方法时,它会在内部将this
设置为调用对象:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply
...原始值将被装箱。
“boxed”表示原语包含在Object中。请注意,这仅适用于apply
/ call
的第一个参数。其他参数变为不是“盒装”的函数参数。