ການນຳໃຊ້ອາຫານ ECMAScript

ການສ້າງແລະກຳລັງວັດຖຸຈະຖືກການກຳລັງພາຍໃນຂະບວນການດຳເນີນຂອງ JavaScript, ທີ່ຈະຮູ້ສຶກຫາຄວາມຄິດຂອງການສ້າງແລະກຳລັງວັດຖຸຈະຮູ້ສຶກຫາຄວາມຄິດຢ່າງຫຼາຍຫຼາຍ.

ການປະກາດແລະກຳລັງ

ການສ້າງແລະກຳລັງວັດຖຸຈະຖືກການກຳລັງພາຍໃນຂະບວນການດຳເນີນຂອງ JavaScript, ທີ່ຈະຮູ້ສຶກຫາຄວາມຄິດຂອງການກຳລັງການສ້າງແລະກຳລັງວັດຖຸຈະຮູ້ສຶກຫາຄວາມຄິດຢ່າງຫຼາຍຫຼາຍ.

var oObject = new Object();
var oStringObject = new String();

ການສະໜັບສະໜູນການກຳລັງການສ້າງວັດຖຸທີ່ມີຄວາມຫົວຫາວັດຖຸຫຼັງຈາກຄຳປະກອບ new ແລະຊື່ວັດຖຸທີ່ຈະສ້າງ. ການສ້າງວັດຖຸຈະຖືກຄັ້ງການສ້າງພາຍໃນພາກຂອງຫົວຫາ.

var oObject = new Object;
var oStringObject = new String;

ການຫົວຫາວັດຖຸ

ໃນວັນນີ້, ພວກເຮົາໄດ້ສະເໜີຄວາມເຫັນຄວາມຂອງການຫົວຫາ。ໃນ ECMAScript, ບໍ່ສາມາດເຂົ້າເຖິງພາບທາງທີ່ທາງຂອງວັດຖຸ, ແຕ່ພຽງແຕ່ຫາການຫົວຫາວັດຖຸ. ແຕ່ບໍ່ມີຄວາມມີນິຕິທີ່ຈະຖືກຄັ້ງການສ້າງວັດຖຸ, ການຄັ້ງການທີ່ພັກຄັ້ງການທີ່ພັກຄັ້ງການຈະຖືກຄັ້ງການສ້າງພາຍໃນພາກຂອງຫົວຫາ.

ການຍົກຍ້າຍວັດຖຸ

ECMAScript ມີເຄື່ອງການກັກກັນຄວາມສູນເສຍຄວາມມີນິຕິການການກັກກັນເສຍຄວາມມີນິຕິ (garbage collection routine)ວ່າບໍ່ຕ້ອງການກຳລັງລົບວັດຖຸເພື່ອປະກອບຄວາມມີນິຕິ. ເວລາທີ່ບໍ່ມີການຫົວຫາວັດຖຸອີກອີກໜຶ່ງຄັ້ງວ່າວັດຖຸດັ່ງກ່າວຈະຖືກກຳລັງການຍົກຍ້າຍ (dereference). ເວລາທີ່ກຳລັງການກັກກັນເສຍຄວາມມີນິຕິຄວາມມີນິຕິທັງໝົດທີ່ຖືກຍົກຍ້າຍຈະຖືກລົບ. ເວລາທີ່ການຫຼິ້ນງານຂອງຫົວຫາຈະສຳເລັດການປະຕິບັດການຂອງຫົວຫາຄວາມມີນິຕິຈະດຳເນີນການກັກກັນເສຍຄວາມມີນິຕິທັງໝົດທີ່ຖືກຍົກຍ້າຍ, ຍົກຍ້າຍທັງທີ່ມີທາງຄວາມມີນິຕິທີ່ບໍ່ສາມາດຄາດຄະເນໄດ້.

把对象的所有引用都设置为 null,可以强制性地废除对象。例如:

var oObject = new Object;
// do something with the object here
oObject = null;

当变量 oObject 设置为 null 后,对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时,该对象将被销毁。

每用完一个对象后,就将其废除,来释放内存,这是个好习惯。这样还确保不再使用已经不能访问的对象,从而防止程序设计错误的出现。此外,旧的浏览器(如 IE/MAC)没有全面的无用存储单元收集程序,所以在卸载页面时,对象可能不能被正确销毁。废除对象和它的所有特性是确保内存使用正确的最好方法。

ຄໍາເຕືອນ:ຕ້ອງຫັນຫາການຖອນຫລັງຂອງວັດຖຸທັງໝົດ. ຖ້າວັດຖຸມີຫລັງກັບຫລາຍຫນານເປັນສອງຫລານແລະຫລາຍຫນານອີກ ເພື່ອຖອນວັດຖຸພະຍາຍາມຢ່າງຖືກຕ້ອງ ຕ້ອງກວດຫລັງກັບຫລັງທັງໝົດ.

ການປະສົມເບື້ອງຕົ້ນ ແລະ ປະສົມຫລັງ

ການປະສົມ (binding) ແມ່ນວິທີທີ່ຈະປະສົມອຸປະກອນວິທີຫລັງກັບຮູບແບບວັດຖຸ.

ການປະສົມປະສານເບື້ອງຕົ້ນ (early binding) ແມ່ນວ່າກ່ອນຈະສ້າງວັດຖຸ ຈະກໍານົດປະສົມປະສານຂອງວັດຖຸພາຍໃນຫົວໜ້າຫລື ຄູ່ພິມບົດຄັດບັນຍາບໍ່ມີການປະສົມປະສານຫລັງ. ໃນພາສາຫລັງຄຳວັດຖຸເຊັ່ນ Java ແລະ Visual Basic ທີ່ມີການປະສົມປະສານເບື້ອງຕົ້ນ ຈະອະນຸຍາດໃຫ້ພວກເຮົາໃຊ້ IntelliSense (ພາສາຫລັງຄຳວັດຖຸທີ່ຈະສະໜອງລາຍການປະສົມປະສານຫລັງຫລືວິທີບັນຍາຂອງວັດຖຸ) ໃນສະຖານທີ່ພັດທະນາ. ECMAScript ບໍ່ແມ່ນພາສາທີ່ມີຮູບແບບຄວາມຖືກຕ້ອງ ແລະ ບໍ່ສະໜັບສະໜູນການປະສົມປະສານເບື້ອງຕົ້ນ.

ຕອນນັ້ນຂອງການປະສົມປະສານຫລັງ (late binding) ແມ່ນວ່າ ຄູ່ຜະລິດຫົວໜ້າຫລື ຄູ່ພິມບົດຄັດບັນຍາບໍ່ຮູ້ວ່າຮູບແບບວັດຖຸ. ການນຳໃຊ້ປະສົມປະສານຫລັງນີ້ ບໍ່ຕ້ອງກວດຮູບແບບວັດຖຸ ແຕ່ພຽງແຕ່ກວດວ່າວັດຖຸມີຜະລິດຫລັງຫລືວິທີບັນຍາ. ທັງໝົດສິ່ງພາຍໃນ ECMAScript ທັງໝົດແມ່ນມີການປະສົມປະສານຫລັງ. ນີ້ຈະອະນຸຍາດໃຫ້ມີການດຳເນີນວັດຖຸວັດຖຸຫລາຍຫລາຍຫນານ ແລະ ບໍ່ມີຄວາມຕ້ອງສົງກັນ.