Tôi có một hàm mảng iterator:JavaScript: bất ngờ typeof kết quả
function applyCall(arr, fn) {
fn.call(arr[0], 0, arr[0]);
}
và một số mã
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
});
Tại sao typeof this
bên trong hàm inline object
thay vì string
?
jsfiddle here
Chỉ cần lưu ý. Tôi tin rằng câu lệnh cuối cùng nên là 'typeof this === typeof val' thay vì' typeof (this === val) ' – techfoobar
Bởi vì' this' không đề cập đến 'arr1' nữa. Khi bạn sử dụng 'this' trong hàm, nó tham chiếu đến' function' là một đối tượng. –
@icanc - Điều đó không đúng. Đối số đầu tiên cho '.call()' quyết định cái 'này' nằm bên trong hàm. – techfoobar