Куда пропадает глобальная переменная?
console.log(this.id); //Тут ок this.mass.forEach(function(item, i, arr) { console.log(this.id); //Тут ее уже нет, undefened Что делать и как ее сохранить? |
more_apps - относительно другой переменой, почему и что делать?
|
А для forEach указать this не пробовал? Точнее для callback.
|
Цитата:
|
Цитата:
|
this - это не глобал, this - это контекст, и в каждой функции он свой.
var globalVariable = "value"; // Вне функций переменные объявляются в глобальной области видимости. window.globalVariable = "value"; // То же самое, потому что свойства объекта window автоматически попадают в глобальную область видимости this.globalVariable = "value"; // То же самое, потому что вне функций контекст кода - объект window mass.forEach(function(item, i, arr) { console.log(globalVariable); // Вывести значение глобальной переменной globalVariable. Никакие идентификаторы не нужны, обращение идет просто по имени переменной. }); Разумеется, код справедлив только при исполнении в браузере, в том же node.js механизм работы с глобалом немного другой (объект global вместо window, this и внешний скоп никогда не равны global). |
Не слушайте предыдущего оратора, от тут в качестве потешного, который тужится всем показать, что он что-то понимает:) Ключевое слово this выполняет роль динамической ссылки на контекст вызова. Само сабой, он не в "каждой ф-ции свой", а для каждого вызова свой, он резольвиться в рантайме, подробней можете почитать о динамическом связывании (это оно), например, в Смоллток.
|
Цитата:
|
Цитата:
Цитата:
При вызове глобальной функции this == window. "use strict"; function showContext() { console.log(this); } showContext(); // Window При вызове замкнутой функции this == undefined (в строгом режиме, разумеется). "use strict"; (function(callback) { function showContext() { console.log(this); } showContext(); //undefined })(); При вызове функции как метода какого-то объекта this равен этому объекта. "use strict"; (function(callback) { function showContext() { console.log(this); } var object = { method: showContext }; object.method(); //Object { method: showContext() } })(); Также можно явно указать контекст функции с помощью Function#call, что и происходит в Array#forEach - здесь this резолвится в перебираемый массив. |
При вызове глобальной функции this == window.
у меня показывает undefined |
Часовой пояс GMT +3, время: 00:29. |