Куда пропадает глобальная переменная?
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, время: 15:50. |