ECMAScript Closure
- Nakaraang pahina Objekto ng Function
- Susunod na pahina May direksyong batay sa objekto
Isa sa pinakamalaking pagkakamali ng ECMAScript ay ang pag-suporta nito sa closure (closure).
Ang closure, ay tumutukoy sa leksikal na represyentasyon ng function na kasama ang hindi nalinanghalang variable, ibig sabihin, ang function ay makakakuha ng variable na itinukoy sa labas ng function.
Simpleng halimbawa ng closure
Ang paggamit ng global variable sa ECMAScript ay isang simpleng halimbawa ng closure.
var sMessage = "hello world"; function sayHelloWorld() { alert(sMessage); } sayHelloWorld();
Sa mga ito na kodigo, ang script ay ilulagay sa memorya pagkatapos ng pagkakarga, walang pagkakalkula ng halaga ng variable na sMessage para sa function na sayHelloWorld(). Ang function na sayHelloWorld() ay kumuha ng halaga ng sMessage lamang para sa hinaharap na paggamit, ibig sabihin, alam ng interpreter na dapat suriin ang halaga ng sMessage kapag tinawag ang function. Ang sMessage ay ibalik bilang halaga kapag tinawag ang function na sayHelloWorld() (sa huling linya), at ipapakita ang mensahe "hello world".
Mahigit na kumplikadong halimbawa ng closure
Ang pagtutukoy ng isa sa loob ng isa ay magpapalimutan ang closure sa higit na kumplikado.
var iBaseNum = 10; function addNum(iNum1, iNum2) { function doAdd() { return iNum1 + iNum2 + iBaseNum; } return doAdd(); }
Dito, ang function na addNum() ay kasama ang function na doAdd() (closure). Ang panloob na function ay isang closure dahil ito ay magkakakuha ng mga parametro ng panlabas na function na iNum1 at iNum2 at ang halaga ng global variable na iBaseNum. Ang huling hakbang ng addNum() ay ang pagtawag sa doAdd(), na magkakasumala ng dalawang parametro at ang global variable, at ibalik ang kabuuan nito.
Ang mahalagang konsepto na dapat alamin dito ay, ang function na doAdd() ay walang parametro, ang pinagmulan ng nilalanghap na halaga ay mula sa kapaligiran ng eksekusyon.
Maaaring makita, ang closure ay isang napakalakas at napakagamit na bahagi ng ECMAScript, na maaring gamitin para sa masusing pagkalkula.
Mga tip:Kung gayon, kailangan ng pag-iingat sa paggamit ng closure, dahil maaaring magiging napakalimutan sila.
- Nakaraang pahina Objekto ng Function
- Susunod na pahina May direksyong batay sa objekto