ECMAScript 闭包

ສິ່ງທີ່ຫຼາຍສະແດງສະເທືອນສຳລັບ 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, ສາມາດນຳໃຊ້ເພື່ອການທຳນາຍການສັບສົນຫຼາຍ.

ຄຳແນະນຳ:ຄືກັບການນຳໃຊ້ບັນດາອັນດັບຫຼັກສູດທີ່ສູງ, ການນຳໃຊ້ຄອນກະບຸກຄືກັບຈະກາຍເປັນການຊັບຊ້ອນຫຼາຍ.