Вы находитесь на странице: 1из 3

Кисіль О.

, КІ-172
Лабораторная робота №7. Анонимные функции. Замыкания.
7.1 Цель работы: знакомство с функциональными выражениями. Принцыпы
работы функций. Замыкания.

7.2 Ход работы


1. Продумать, где можно применить замыкания.

Например, надо выводить в лог сообщение, а также номер строки и время


прошедшее с момента зарузки страницы. Если не использовать замыкание, то надо
определить следующую функцию
function log(timespan, lineNumber, msg) {
console.log(linNumber + " " + timespan + " " + msg;
}

и две переменные
var start = Date.now();
var lineNumber = 1;

Вызываем log так


log(Date.now()-start, lineNumber++, "один");
log(Date.now()-start, lineNumber++, "два");

Очевидно, что это неудобно.


Если использовать замыкание, то пишем так
var log = (function () { // функция 1
var start = Date.now(); // текущее значение сохранятся в start
var num = 1; // также используется в замыкании в функции 2.
return function (msg) { // функция 2 - сохраняется в var log
console.log(num++ + " " + (Date.now()-start) + " " + msg);
}
})(); // () -- вызываем функцию 1

Вызываем так
log("один");
log("два");

Результат
lineNumber timespan msg
------------------------------
1 0 один
2 1 два

Т.е. замыкание — это способ передачи данных в функцию


2. Не выполняя кода, ответить, что выведут браузер и почему

if (!( "a" in window )) {


var a = 1;
}
alert ( a );

Рисунок 4.1 – Скрипт кода


Атрибута «a» в window нет, и ему там неоткуда появится после if, поэтому
undefined.
Var a = 1,
b = function a ( x ) {
x && a (-- x );
};
alert ( a );

Рисунок 4.2 – Скрипт кода


Вывод значения a (1).
function a ( x ) {
return x * 2;
}
var a;
alert ( a );

Рисунок 4.3 – Скрипт кода


var не переинициализирует переменную. Будет вывод функции в виде текста.
function b ( x , y , a ) {
arguments [ 2 ] = 10;
alert ( a );
}
b ( 1 , 2 , 3 );

Рисунок 4.4 – Скрипт кода


Логично, что a и arguments[2] — это ссылка на одно и то же значение. Иначе
попадаем на память. Вывод значения а (10).
function a () {
alert ( this );
}
a . call ( null );

Рисунок 4.5 – Скрипт кода


this в глобальной области указывает на window. Вызов call() у функции
с параметром null равнозначно вызову call() без аргументов. А без аргументов вызываемая
функция не «биндится» ни к какому объекту (или «биндится» к «объекту
по умолчанию» — window). В итоге происходит вывод [object window].

7.3 Выводы
В ходе лабораторной работы было знакомство с функциональными выражениями,
принципами работы функций и замыканием.

Вам также может понравиться

  • 9 Labaweb
    9 Labaweb
    Документ1 страница
    9 Labaweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 13 Labaweb
    13 Labaweb
    Документ4 страницы
    13 Labaweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 3 Labweb
    3 Labweb
    Документ3 страницы
    3 Labweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 8 Labaweb
    8 Labaweb
    Документ6 страниц
    8 Labaweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 15 Labaweb
    15 Labaweb
    Документ2 страницы
    15 Labaweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 5 Labweb
    5 Labweb
    Документ3 страницы
    5 Labweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 4 Labweb
    4 Labweb
    Документ2 страницы
    4 Labweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 6 Labaweb
    6 Labaweb
    Документ3 страницы
    6 Labaweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 10 Labaweb
    10 Labaweb
    Документ3 страницы
    10 Labaweb
    Maksymenko Oleksiy
    Оценок пока нет
  • 14 Labaweb
    14 Labaweb
    Документ2 страницы
    14 Labaweb
    Maksymenko Oleksiy
    Оценок пока нет
  • Document
    Document
    Документ8 страниц
    Document
    Viktor Balykov
    Оценок пока нет
  • Тесты по теме Денежный рынок PDF
    Тесты по теме Денежный рынок PDF
    Документ16 страниц
    Тесты по теме Денежный рынок PDF
    Sokovanov Igor
    Оценок пока нет
  • РеСтРукТ
    РеСтРукТ
    Документ10 страниц
    РеСтРукТ
    Максим
    Оценок пока нет
  • Bilet 2022 22
    Bilet 2022 22
    Документ363 страницы
    Bilet 2022 22
    Ali Tariq
    Оценок пока нет
  • Стандарт ЭСТОНИИ EVS 811 ПРОЕКТ ЗДАНИЯ
    Стандарт ЭСТОНИИ EVS 811 ПРОЕКТ ЗДАНИЯ
    Документ30 страниц
    Стандарт ЭСТОНИИ EVS 811 ПРОЕКТ ЗДАНИЯ
    Hanna
    Оценок пока нет
  • Grundfosliterature 1666
    Grundfosliterature 1666
    Документ70 страниц
    Grundfosliterature 1666
    vvk
    Оценок пока нет
  • Elibrary 13060631 60194833
    Elibrary 13060631 60194833
    Документ28 страниц
    Elibrary 13060631 60194833
    Назым Аскарова
    Оценок пока нет