ECMAScript 闭包
- ຫນ້າທີ່ໜ້າທັນທີ ບັນດາອັນດັບ Function
- ຫນ້າທີ່ໜ້າຫລັງ ຫຼັກສູດປະຈຳວັດທະນະທຳ
ສິ່ງທີ່ຫຼາຍສະແດງສະເທືອນສຳລັບ ECMAScript ແມ່ນວ່າມັນສະໜັບສະໜູນການປິດປະກາດ (closure).
闭包,指的是词法表示包括不被计算的变量的函数,也就是说,函数可以使用函数之外定义的变量。
简单的闭包实例
在 ECMAScript 中使用全局变量是一个简单的闭包实例。请思考下面这段代码:
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
在上面这段代码中,脚本被载入内存后,并没有为函数 sayHelloWorld() 计算变量 sMessage 的值。该函数捕获 sMessage 的值只是为了以后的使用,也就是说,解释程序知道在调用该函数时要检查 sMessage 的值。sMessage 将在函数调用 sayHelloWorld() 时(最后一行)被赋值,显示消息 "hello world"。
ບັນດາຄອນກະບຸກຊັບຊ້ອນ
ການສ້າງບັນດັບໃນບັນດັບອາດຈະເຮັດໃຫ້ຄອນກະບຸກມີຄວາມຊັບຊ້ອນຫຼາຍ. ເປັນຕົວຢ່າງ:
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
ບັນດາບັນດາອັນດັບນີ້, ບັນດັບ addNum() ບັນຍາການ doAdd() (ຄອນກະບຸກ). ບັນດັບພາຍໃນແມ່ນຄອນກະບຸກ ຍ້ອນວ່າມັນຈະຮັບຂໍ້ມູນຈາກບັນດັບພາຍໃນ iNum1, iNum2 ແລະຄວາມທີ່ຈາກຄວາມລັບລະຫວ່າງຈັກກະບຸກ. ບັນດັບສຸດທ້າຍຂອງ addNum() ໄດ້ກໍາລັງ doAdd(), ບັນຍາການສອງພາສາແລະຄວາມລັບລະຫວ່າງຈັກກະບຸກ, ແລະກັບຄືນຄວາມລວມ.
ຄວາມສຳຄັນທີ່ຕ້ອງຈັບຕາມແມ່ນ, ອັນດັບ doAdd() ບໍ່ຍອມຮັບພາສາຜົນ, ຄວາມທີ່ຂອງອັນດັບນີ້ແມ່ນຈາກການຫາມາຈາກສິ່ງທີ່ຕິດຕາມການດຳເນີນ.
ສາມາດເຫັນໄດ້ວ່າ, ຄອນກະບຸກແມ່ນສ່ວນທີ່ທີ່ຮັກສາຫຼາຍແລະມີຫຼາຍຄວາມສາມາດໃນ ECMAScript, ສາມາດນຳໃຊ້ເພື່ອການທຳນາຍການສັບສົນຫຼາຍ.
ຄຳແນະນຳ:ຄືກັບການນຳໃຊ້ບັນດາອັນດັບຫຼັກສູດທີ່ສູງ, ການນຳໃຊ້ຄອນກະບຸກຄືກັບຈະກາຍເປັນການຊັບຊ້ອນຫຼາຍ.
- ຫນ້າທີ່ໜ້າທັນທີ ບັນດາອັນດັບ Function
- ຫນ້າທີ່ໜ້າຫລັງ ຫຼັກສູດປະຈຳວັດທະນະທຳ