Рассмотрим следующий код:
var obj = {
name: 'Hans',
print: function(p) {
console.log(this.name)
}
};
obj.print(); // prints 'Hans'
Мы знаем, что функция print
вызывается для объекта obj
. Другими словами, obj
является (частью) контекста выполнения print
. Легко, правда?
Вот что я пытаюсь понять: подумайте о том, чтобы сохранить ссылку на функцию в массиве:
var funcs = [function(p) {
console.log(this.length, this)
}];
funcs[0](); // prints 1 which is the length of the array 'func' and also [ [Function] ]
Это означает, что контекст выполнения первого элемента в массиве при его запуске - это сам массив !! Я предполагал, что то, что хранится в массиве, является не чем иным, как ссылкой на функцию, поэтому это эквивалентно этому:
var f = function(p) {
console.log(this)
};
var funcs = [f];
f(); // prints Window
, что оказывается неверным. Что мне здесь не хватает?