ຮຽນ JavaScript ໃຫ້ແທດເໝາະ: ຫົກສິ່ງທີ່ສຳຄັນແທ້
ຄົນສ່ວນຫຼາຍຮຽນ JavaScript ແບບກອງໄວຍະກອນ: ຂຽນ loop ແນວໃດ, ໃສ່ click handler ແນວໃດ, ດຶງຂໍ້ມູນແນວໃດ. ແລ້ວກໍພົບບັກທີ່ອະທິບາຍບໍ່ໄດ້ ຈຶ່ງສະຫຼຸບວ່າພາສານີ້ແປກ. ມັນບໍ່ໄດ້ແປກ. ມັນມີແນວຄິດພື້ນຖານພຽງບໍ່ຫຼາຍ ແລະ ເມື່ອທ່ານຈັບແນວຄິດເຫຼົ່ານັ້ນໄດ້ ສ່ວນທີ່ເຫຼືອກໍພຽງແຕ່ເປີດເອກະສານເບິ່ງ.
1–2. ຄ່າ ແລະ ຄວາມຕ່າງລະຫວ່າງການສຳເນົາ ກັບ ການຊີ້
ຕົວເລກຖືກສຳເນົາ. ອອບເຈັກບໍ່ຖືກສຳເນົາ — ທ່ານໄດ້ພຽງຊື່ທີສອງຂອງສິ່ງດຽວກັນ. ເກືອບທຸກບັກທີ່ເຮັດໃຫ້ຜູ້ເລີ່ມຕົ້ນສັບສົນ (ຂ້ອຍປ່ຽນອັນໜຶ່ງ ແຕ່ອີກອັນປ່ຽນນຳ!) ຄືກົດຂໍ້ນີ້ກຳລັງສະແດງຕົວ. ຮຽນມັນແຕ່ຕົ້ນ ແລະ ຢ່າງຕັ້ງໃຈ.
const a = { name: 'Hue' }
const b = a // not a copy — the same object, a second name
b.name = 'Vang'
console.log(a.name) // 'Vang' ← surprises everyone once
const c = { ...a } // now it is a copy
c.name = 'Someone'
console.log(a.name) // 'Vang' ← unchanged3–4. ຟັງຊັນເປັນຄ່າ ແລະ ມັນຈື່ບ່ອນທີ່ມັນເກີດ
ຟັງຊັນສາມາດເກັບໄວ້ໃນຕົວປ່ຽນ, ສົ່ງເຂົ້າຟັງຊັນອື່ນ ແລະ ຖືກສົ່ງກັບອອກມາໄດ້. ນັ້ນຄືເຫດຜົນທີ່ array.map(fn) ໃຊ້ໄດ້. ແລະ ຟັງຊັນຍັງເຂົ້າເຖິງຕົວປ່ຽນທີ່ຢູ່ຂ້າງບ່ອນມັນຖືກສ້າງ — ເອີ້ນວ່າ closure. ສອງແນວຄິດນີ້ຮວມກັນ ຄືສິ່ງທີ່ເຮັດໃຫ້ JavaScript ມີພະລັງ ແລະ ການຂ້າມມັນໄປ ຄືເຫດຜົນທີ່ callback ເບິ່ງຄືເວດມົນ ແທນທີ່ຈະເປັນກົນໄກ.
5–6. ໂຄ້ດແບບອະຊິງໂຄຣນັດ ແລະ event loop ທີ່ຢູ່ເບື້ອງຫຼັງ
ການດຶງຂໍ້ມູນໃຊ້ເວລາ ແລະ JavaScript ບໍ່ຍອມຢືນລໍຖ້າ. ມັນສົ່ງໜ້າວຽກໄປ, ເຮັດວຽກຕໍ່ ແລ້ວຄ່ອຍກັບມາເມື່ອຄຳຕອບມາຮອດ. Promise ແລະ async/await ຄືວິທີຂຽນສິ່ງນັ້ນ ໂດຍບໍ່ໃຫ້ໂຄ້ດກາຍເປັນຂັ້ນໄດ. ຖ້າທ່ານເຂົ້າໃຈວ່າເປັນຫຍັງໂຄ້ດລຸ່ມນີ້ພິມອອກຕາມລຳດັບນັ້ນ ແປວ່າທ່ານເຂົ້າໃຈ event loop ພໍທີ່ຈະແກ້ບັກໄດ້ເກືອບທຸກຢ່າງ.
console.log('1')
setTimeout(() => console.log('3'), 0) // handed off, runs last
Promise.resolve().then(() => console.log('2b'))
console.log('2a')
// 1, 2a, 2b, 3 — not the order it is written in.
// Synchronous code first, then promises, then timers.ຝຶກແນວໃດ
ຢ່າທ່ອງຈຳ method. ໃຫ້ເອົາໂປຣແກຣມນ້ອຍໆອັນໜຶ່ງ — ລາຍການສິ່ງທີ່ຕ້ອງເຮັດ, ເກມພິມ, ຕົວປ່ຽນເງິນຕາ — ແລ້ວຂຽນມັນສາມເທື່ອ ພາຍໃນສາມອາທິດ ໂດຍບໍ່ເປີດເບິ່ງສະບັບກ່ອນ. ສິ່ງທີ່ທ່ານລືມ ຄືສິ່ງທີ່ທ່ານບໍ່ເຄີຍເຂົ້າໃຈ ແລະ ຕອນນີ້ທ່ານກໍຮູ້ແລ້ວວ່າຄວນຮຽນຫຍັງ.