Сборка от 17 марта 2017 г


Функции‑стрелки не имеют своего this



Download 9,9 Mb.
bet261/349
Sana26.04.2022
Hajmi9,9 Mb.
#582433
TuriУчебник
1   ...   257   258   259   260   261   262   263   264   ...   349
Bog'liq
ilja kantor sovremennyj uchebnik-1chast PdfToWord

Функции‑стрелки не имеют своего this


Внутри функций‑стрелок – тот же this , что и снаружи.


Это очень удобно в обработчиках событий и коллбэках, например:


'use strict';


let group = {


title: "Наш курс",
students: ["Вася", "Петя", "Даша"],


showList: function() { this.students.forEach(
student => alert(this.title + ': ' + student)
)
}
}

group.showList();


// Наш курс: Вася
// Наш курс: Петя
// Наш курс: Даша

Здесь в forEach была использована функция‑стрелка, поэтому this.title в коллбэке – тот же, что и во внешней функции showList . То есть, в данном случае – group.title .


Если бы в forEach вместо функции‑стрелки была обычная функция, то была бы ошибка:

'use strict';


let group = {


title: "Наш курс",
students: ["Вася", "Петя", "Даша"],


showList: function() { this.students.forEach(function(student) {
alert(this.title + ': ' + student); // будет ошибка
})
}
}

group.showList();


При запуске будет "попытка прочитать свойство title у undefined ", так как .forEach(f) при запуске f не ставит this . То есть, this внутри


forEach будет undefined .




Функции‑стрелки не имеют своего arguments


В качестве arguments используются аргументы внешней «обычной» функции. Например:

'use strict';


function f() {


let showArg = () => alert(arguments[0]); showArg();
}

f(1); // 1


Вызов showArg() выведет 1 , получив его из аргументов функции f . Функция‑стрелка здесь вызвана без параметров, но это не важно: arguments


всегда берутся из внешней «обычной» функции.

Сохранение внешнего this и arguments удобно использовать для форвардинга вызовов и создания декораторов.


Например, декоратор defer(f, ms) ниже получает функцию f и возвращает обёртку вокруг неё, откладывающую вызов на ms миллисекунд:




'use strict';
function defer(f, ms) { return function() {
setTimeout(() => f.apply(this, arguments), ms)
}
}

function sayHi(who) { alert('Привет, ' + who);


}

let sayHiDeferred = defer(sayHi, 2000); sayHiDeferred("Вася"); // Привет, Вася через 2 секунды


Аналогичная реализация без функции‑стрелки выглядела бы так:




function defer(f, ms) { return function() {
let args = arguments; let ctx = this; setTimeout(function() {
return f.apply(ctx, args);
}, ms);
}
}

В этом коде пришлось создавать дополнительные переменные args и ctx для передачи внешних аргументов и контекста через замыкание.




Итого


Основные улучшения в функциях:





  • Можно задавать параметры по умолчанию, а также использовать деструктуризацию для чтения приходящего объекта.

  • Оператор spread (троеточие) в объявлении позволяет функции получать оставшиеся аргументы в массив: function f(arg1, arg2, ...rest) .

  • Тот же оператор spread в вызове функции позволяет передать её массив как список аргументов (вместо apply ).

  • У функции есть свойство name , оно содержит имя, указанное при объявлении функции, либо, если его нет, то имя свойства или переменную, в которую она записана. Есть и некоторые другие ситуации, в которых интерпретатор подставляет «самое подходящее» имя.

  • Объявление Function Declaration в блоке {...} видно только в этом блоке.

  • Появились функции‑стрелки:

    • Без фигурных скобок возвращают выражение expr : (args) => expr .

    • С фигурными скобками требуют явного return .

    • Не имеют своих this и arguments , при обращении получают их из окружающего контекста.

    • Не могут быть использованы как конструкторы, с new .



Строки


Есть ряд улучшений и новых методов для строк. Начнём с, пожалуй, самого важного.



Download 9,9 Mb.

Do'stlaringiz bilan baham:
1   ...   257   258   259   260   261   262   263   264   ...   349




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish