Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
jQuery-tutorial-for-beginners-1.0.0.pdf
Скачиваний:
29
Добавлен:
17.02.2016
Размер:
1.82 Mб
Скачать

4. Функция вернёт this (по умолчанию)

Результатом выполнения кода будет следующий объект:

me = { name: "Anton", status: 1 };

Область видимости и чудо this

Для тех, кто только начинает своё знакомство с JavaScript я расскажу следующие нюансы:

когда вы объявляете переменную или функцию, то она становится частью window:

var a = 1234; console.log(window["a"]); // => 1234 function myLog(message) {

console.log(message);

}

window["myLog"](a); // => 1234

когда искомая переменная не найдена в текущей области видимости, то её поиски будут продолжены в области видимости родительской функции:

var a = 1234;

(function(){

var b = 4321; (function() {

var c = 1111; console.log((a+b)/c); // => 5

})();

})();

чудо-переменная this всегда указывает на текущий объект вызывающий функцию (поскольку по умолчанию все переменные и функции попадают в window, то this == window):

var a = 1234;

function myLog() {

console.log(this.a); // => 1234

}

25

контекст this можно изменить используя функции bind, call, и apply

Всё что касается window относится лишь к браузерам, но поскольку книга о jQuery, то иное поведение я и не рассматриваю, но вот так прозрачно намекаю, что оно есть ;)

Замыкания

Изучив замыкания, можно понять много магии в JavaScript’e. Приведу пример кода с пояснениями:

var a = 1234;

var myFunc = function(){ var b = 4321;

var c = 1111; return function() {

return ((a+b)/c);

};

};

var anotherFunc = myFunc(); // myFunc возвращает анонимную функцию

// с «замкнутыми» значениями c и b console.log(anotherFunc()); // => 5

Что же тут происходит: функция, объявленная внутри другой функции, имеет доступ к переменным родительской функции. Повтыкайте в код, пока вас не осенит, о чём я тут толкую.

Рекомендуемые статьи по теме:

«Функции "изнутри", замыкания»

[http://learn.javascript.ru/closures]

«Использование замыканий»

[http://learn.javascript.ru/closures-usage]

«Closures: Front to Back» [http://net.tutsplus.com/tutorials/javascript-ajax/closures-front-to-back/]

Вводная по JavaScript затянулась, лучше почитайте: http://learn.javascript.ru/

26