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インライン関数内にあるのはなぜですか?objectstring

ここで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 に答える