ອົງການ Function ECMAScript (ວິທະຍາການ)

ພາສານລະບົບ ECMAScript ພວກເລົ່ານັ້ນແມ່ນອຸປະກອນທີ່ມີພາສານປະສົມຫຼາຍ.

ພາສານລະບົບ Function (ພາສານລະບົບ)

ພາສານລະບົບ ECMAScript ທີ່ສຳຄັນທີ່ສຸດແມ່ນວ່າຕົວເລື່ອງພວກເລົ່ານັ້ນແມ່ນອຸປະກອນທີ່ມີພາສານປະສົມຫຼາຍ.

ພາສານລະບົບ Function ສາມາດສະແດງຕົວເລື່ອງທີ່ນັກພັດທະນາອອກມາໄດ້.

ພາສານລະບົບ Function ທີ່ຈະສ້າງຕົວເລື່ອງພວກເລົ່ານັ້ນແມ່ນ:

var function_name = new function(arg1, arg2, ..., argN, function_body)

ໃນຮູບແບບນີ້, ທຸກຄວາມ arg ທັງສອງຄວາມ, ສຸດຄວາມແມ່ນບັນດາຄູ່ມູນທີ່ຈະດຳເນີນການວຽກ (ການດຳເນີນການຫຼັງຈາກ).

ຍັງມີຄວາມທີ່ພວກເຈົ້າຈື່ງຍັງຮູ້ບໍ່?

function sayHi(sName, sMessage) {
  alert("Hello " + sName + sMessage);
}

ຫຼາຍຢ່າງນີ້ກໍ່ຈະສາມາດກໍານົດງານວ່າ:

var sayHi 
= 
new Function("sName", "sMessage", "alert(\"Hello \" + sName + sMessage);");

ເຖິງວ່າການຂຽນນີ້ຈະມີຄວາມຫຼາຍຢູ່ທາງຈາກຄຳແບບ, ມັນຈະຊ່ວຍຈາກການເຂົ້າໃຈວ່າບັນດາຄູ່ມູນວຽກພຽງແຕ່ບັນດາຄວາມຂອງຊະນິດນິວເຊີຍ, ທີ່ມີພາລະກິດທີ່ຄືກັບບັນດາຄູ່ມູນວຽກທີ່ຖືກກໍານົດງານດ້ວຍ Function 类.

ບັນດາຄວາມນີ້:

function doAdd(iNum) {
  alert(iNum + 20);
}
function doAdd(iNum) {
  alert(iNum + 10);
}
doAdd(10);	//ອອກຜົນ "20"

ຄວາມທີ່ທ່ານຮູ້, ບັນດາຄູ່ມູນວຽກຄັ້ງທີສອງໄດ້ຂຽນກັບຄູ່ມູນວຽກຄັ້ງທີໜຶ່ງ, ທີ່ doAdd(10) ອອກຜົນ "20", ບໍ່ແມ່ນ "30".

ຖ້າຄວາມນີ້ຖືກຂຽນອີກຄັ້ງທີ່ນັ້ນ, ຄວາມນີ້ຈະຫຼາຍກວ່າ:

var doAdd = new Function("iNum", "alert(iNum + 20)");
var doAdd = new Function("iNum", "alert(iNum + 10)");
doAdd(10);

ບັນດາຄວາມນີ້ພວກເຈົ້າບັນດາຄວາມວ່າ doAdd ໄດ້ຖືກປ່ຽນຄືນເປັນອີກຄູ່ມູນຊະນິດວຽກທີ່ບໍ່ອາດຈະກັນ. ບັນດາຄວາມວຽກພຽງແຕ່ບັນດາຄວາມທີ່ຝັງໃສ່ຄູ່ມູນວຽກ. ແລະຄວາມສາມາດອອກຜົນທີ່ບໍ່ອາດຈະກັນທີ່ຫຼາຍ:

var doAdd = new Function("iNum", "alert(iNum + 10)");
var alsodoAdd = doAdd;
doAdd(10);	//ອອກຜົນ "20"
alsodoAdd(10);	//ອອກຜົນ "20"

ຢູ່ນີ້ຫຼາຍຢ່າງວ່າບັນດາຄວາມ doAdd ໄດ້ຖືກກໍານົດງານວ່າຄູ່ມູນຊະນິດວຽກຫຼັງຈາກນັ້ນ alsodoAdd ໄດ້ຖືກຖະແຫຼງໃຫ້ຝັງໃສ່ຄູ່ມູນຊະນິດວຽກດຽວກັນ. ທັງສອງບັນດາຄວາມນີ້ສາມາດດຳເນີນການວຽກບັນດາຄວາມນີ້ແລະອອກຜົນກັບການພິຈາລະນາທີ່ດຽວ - "20". ຖ້າຊື່ປະເພດຂອງຄູ່ມູນວຽກພຽງແຕ່ບັນດາຄວາມທີ່ຝັງໃສ່ຄູ່ມູນວຽກຫຼັງຈາກນັ້ນ, ຄວາມສາມາດບັນດາຄູ່ມູນວຽກສາມາດຖືກສົ່ງໄປຫາຄູ່ມູນວຽກອື່ນອີກຫຼືບໍ່?

function callAnotherFunc(fnFunction, vArgument) {
  fnFunction(vArgument);
}
var doAdd = new Function("iNum", "alert(iNum + 10)");
callAnotherFunc(doAdd, 10);	//输出 "20"

在上面的例子中,callAnotherFunc() 有两个参数 - 要调用的函数和传递给该函数的参数。这段代码把 doAdd() 传递给 callAnotherFunc() 函数,参数是 10,输出 "20"。

ເຫັນວ່າ:ເຖິງວ່າສາມາດໃຊ້ພະຍານ Function 构造函数 ເພື່ອສ້າງຫົວຫນັງ, ບໍ່ຕ້ອງໃຊ້ມັນ, ຍ້ອນວ່າມັນມີຄວາມຊ້າຫຼາຍກວ່າວິທີການດັ້ງເດີມ. ແຕ່ວ່າທຸກຫົວຫນັງທຸກຄົນຄວນເປັນພະຍານຂອງປະເພດ Function.

ສະຖານະພາບ length ຂອງ Function Object

ຄືກັບທີ່ກ່າວໄວ້ກ່ອນ, ຫົວຫນັງຢູ່ໃນປະເພດການປະກອບຄວາມຂອງຄຳຂັດແຍ່ງ, ພວກເຂົາກໍ່ມີສະຖານະພາບ ແລະ ວິທີການ.

ສະຖານະພາບ length ທີ່ມີຂອງ ECMAScript ແມ່ນກ່ຽວກັບຈຳນວນຫຼັກຕົວຄວາມທີ່ຫົວຫນັງຄວາມຄາດຫວັງ. ເປັນບັນທຶກ:

function doAdd(iNum) {
  alert(iNum + 10);
}
function sayHi() {
  alert("Hi");
}
alert(doAdd.length);	//ການກະທຳ "1"
alert(sayHi.length);	//ການກະທຳ "0"

ຫົວຫນັງ doAdd() ມີຫຼັກຕົວຄວາມດຽວ, ຍັງມີ length ທີ່ 1; sayHi() ບໍ່ມີຫຼັກຕົວຄວາມ, ຍັງມີ length ທີ່ 0.

ຊົງໄວ້ວ່າ, ບໍ່ວ່າຈະມີຫຼາຍວິທີການທີ່ຖືກກໍານົດ, ECMAScript ສາມາດຍອມຮັບວິທີການຫຼາຍຢ່າງຫຼາຍ (ສູງສູງ 25ວິທີການ), ມັນຖືກບັນທຶກໃນວັດສະດຸ 'ການວິວັດວິນານຂອງຫົວຫນັງ'. ສະຖານະພາບ length ແມ່ນພຽງແຕ່ວິທີການສະຫຼາກຫຼາຍຢ່າງຫຼາຍໃນການທົດລອງຄືກັນກັບຄວາມຄາດຫວັງວິທີການທີ່ຖືກກໍານົດ.

ວິທີການ Function Object

Function Object ມີວິທີການ valueOf() ແລະ toString() ທີ່ເປັນເພີງຄືກັນກັບບັນດາໂອລເບີກ. ສອງວິທີດັ່ງກ່າວກໍ່ເປັນຂໍ້ມູນຂອງບົດກະດີຂອງຫົວຫນັງໃນການທົດລອງຫຼາຍຢ່າງຫຼາຍ. ສະຖານະພາບ length ແມ່ນເປັນວິທີການສະຫຼາກຫຼາຍຢ່າງຫຼາຍໃນການທົດລອງ.

function doAdd(iNum) {
  alert(iNum + 10);
}
document.write(doAdd.toString());

ການປະກອບຂໍ້ຄວາມຂອງຫົວຫນັງ doAdd()ທ້າທາຍດັ່ງກ່າວ!