7

我有一个数组迭代器函数:

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在 inline 函数内object而不是string

jsfiddle在这里

4

1 回答 1

8

在 JavaScript 中调用方法时,它在内部设置this为调用对象:https ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/apply

...和原始值将被装箱。

通过“装箱”,它们意味着原语被包装在一个对象中。请注意,这仅适用于apply/的第一个参数call。其他参数成为未“装箱”的函数参数。

于 2013-02-20T04:00:10.380 回答