this anonim funksiya yaratdingiz. Hisob qaydnomasini 0 gacha ishga tushiring va getScoreusulidan foydalaning, uning ichida setTimeout mavjud va 1 soniyadan so'ng this.score konsolini beradi. This.score belgilangan va ishga tushirilgan bo'lsa ham, konsol qiymati aniqlanmagan qiymat beradi. Bu erda savol - bu kalit so'z. setTimeout ichidagi funksiya o'ziga xos xususiyatli this ga ega va u ichidagi songa murojaat qilishga harakat qiladi va u aniqlanmaganligi sababli u undefined bo'ladi.
Xuddi shu narsani quyida ko'rsatilgandek o'q funktsiyasi yordamida amalga oshirish mumkin:
var ScoreCard = function () {
this.score = 0;
this.getScore = function () {
setTimeout(()=>{
console.log(this.score); // you get 0
}, 1000);
}
}
var a = new ScoreCard();
a.getScore();
Siz quyida ko'rsatilganidek, setTimeout ichidagi funktsiyani o'q funksiyasiga o'zgartirdingiz:
setTimeout(()=>{
console.log(this.score); // you get 0
}, 1000);
O’q funksiyasida o'ziga xos this yo'q va bu ob'ektni ota-onasi bilan baham ko'radi, shuning uchun tashqi e'lon qilingan o'zgaruvchilarga o’q funksiyasi orqali osongina kirish mumkin. Ular qisqaroq sintaksis tufayli, shuningdek, qayta aloqalar, hodisalarni qayta ishlash, ichki sinxronlash funksiyalari va boshqalar bilan foydalidir.