คำถามติดแท็ก anonymous-function

ฟังก์ชันที่ไม่ระบุชื่อใช้บล็อกของโค้ดเป็นค่ากำหนดเป็นฟังก์ชันอินไลน์ที่ไม่มีชื่อ

19
ทำไมคุณต้องเรียกใช้ฟังก์ชันที่ไม่ระบุชื่อในบรรทัดเดียวกัน
ฉันอ่านบทความเกี่ยวกับการปิดและเห็นสิ่งนี้ทุกที่ แต่ไม่มีคำอธิบายที่ชัดเจนว่ามันทำงานอย่างไร - ทุกครั้งที่ฉันเพิ่งบอกให้ใช้ ... : // Create a new anonymous function, to use as a wrapper (function(){ // The variable that would, normally, be global var msg = "Thanks for visiting!"; // Binding a new function to a global object window.onunload = function(){ // Which uses the 'hidden' variable …

10
อธิบายไวยากรณ์ของฟังก์ชันที่ไม่ระบุชื่อที่ถูกห่อหุ้ม
สรุป คุณสามารถอธิบายเหตุผลที่อยู่เบื้องหลังไวยากรณ์สำหรับฟังก์ชั่นที่ไม่ระบุชื่อที่หุ้มใน JavaScript ได้หรือไม่? ทำไมงานนี้: (function(){})();แต่ตอนนี้ไม่ได้: function(){}();? สิ่งที่ฉันรู้ ใน JavaScript หนึ่งสร้างฟังก์ชั่นที่มีชื่อดังนี้: function twoPlusTwo(){ alert(2 + 2); } twoPlusTwo(); คุณสามารถสร้างฟังก์ชั่นที่ไม่ระบุชื่อและกำหนดให้กับตัวแปร: var twoPlusTwo = function(){ alert(2 + 2); }; twoPlusTwo(); คุณสามารถแค็ปซูลบล็อกของรหัสโดยการสร้างฟังก์ชั่นที่ไม่ระบุชื่อจากนั้นห่อในวงเล็บและดำเนินการทันที: (function(){ alert(2 + 2); })(); สิ่งนี้มีประโยชน์เมื่อสร้างสคริปต์แบบแยกส่วนเพื่อหลีกเลี่ยงความยุ่งเหยิงของขอบเขตปัจจุบันหรือขอบเขตโกลบอลที่อาจมีตัวแปรที่ขัดแย้งกัน - เช่นในกรณีของสคริปต์ Greasemonkey, ปลั๊กอิน jQuery เป็นต้น ตอนนี้ฉันเข้าใจว่าทำไมงานนี้ วงเล็บใส่เนื้อหาและเปิดเผยเฉพาะผล (ฉันแน่ใจว่ามีวิธีที่ดีกว่าที่จะอธิบายว่า) (2 + 2) === 4เช่นเดียวกับ สิ่งที่ฉันไม่เข้าใจ …

6
ฟังก์ชั่น PHP แบบเรียกซ้ำแบบไม่ระบุชื่อ
เป็นไปได้ไหมที่มีฟังก์ชัน PHP ที่เรียกซ้ำและไม่ระบุชื่อ? นี่คือความพยายามของฉันในการทำให้มันใช้งานได้ แต่มันไม่ผ่านชื่อฟังก์ชั่น $factorial = function( $n ) use ( $factorial ) { if( $n <= 1 ) return 1; return $factorial( $n - 1 ) * $n; }; print $factorial( 5 ); ฉันรู้ด้วยเช่นกันว่านี่เป็นวิธีที่ไม่ดีที่จะนำแฟคทอเรียลมาเป็นตัวอย่างเท่านั้น

19
javascript: ฟังก์ชันนิรนามเรียกซ้ำ?
สมมติว่าฉันมีฟังก์ชันเรียกซ้ำพื้นฐาน: function recur(data) { data = data+1; var nothing = function() { recur(data); } nothing(); } ฉันจะทำสิ่งนี้ได้อย่างไรหากฉันมีฟังก์ชันที่ไม่ระบุตัวตนเช่น ... (function(data){ data = data+1; var nothing = function() { //Something here that calls the function? } nothing(); })(); ฉันต้องการวิธีเรียกฟังก์ชันที่เรียกฟังก์ชันนี้ ... ฉันเคยเห็นสคริปต์ที่ไหนสักแห่ง (จำไม่ได้ว่าที่ไหน) ที่สามารถบอกชื่อฟังก์ชันที่เรียกคุณได้ แต่ฉันจำไม่ได้ ข้อมูลนั้นในขณะนี้

4
ตำแหน่งของวงเล็บสำหรับการเรียกใช้ฟังก์ชัน JavaScript ที่ไม่ระบุตัวตนโดยอัตโนมัติ?
ฉันเพิ่งเปรียบเทียบเวอร์ชันปัจจุบันของjson2.jsกับเวอร์ชันที่ฉันมีในโปรเจ็กต์ของฉันและสังเกตเห็นความแตกต่างในการสร้างนิพจน์ฟังก์ชันและดำเนินการด้วยตนเอง รหัสที่ใช้ในการปิดฟังก์ชันนิรนามในวงเล็บแล้วเรียกใช้งาน (function () { // code here })(); แต่ตอนนี้มันรวมฟังก์ชันที่เรียกใช้งานอัตโนมัติไว้ในวงเล็บ (function () { // code here }()); มีความคิดเห็นโดย CMS ในคำตอบที่ยอมรับของไวยากรณ์ฟังก์ชันที่ไม่ระบุชื่อที่ห่อหุ้มของExplain JavaScriptว่า "ทั้งคู่: (function(){})();และ(function(){}());ถูกต้อง" ฉันสงสัยว่าความแตกต่างคืออะไร? อดีตใช้หน่วยความจำโดยทิ้งฟังก์ชันทั่วโลกที่ไม่ระบุตัวตนหรือไม่? วงเล็บควรอยู่ที่ไหน?

14
removeEventListener บนฟังก์ชันที่ไม่ระบุชื่อใน JavaScript
ฉันมีวัตถุที่มีวิธีการอยู่ในนั้น วิธีการเหล่านี้ใส่ลงในวัตถุภายในฟังก์ชันที่ไม่ระบุตัวตน ดูเหมือนว่า: var t = {}; window.document.addEventListener("keydown", function(e) { t.scroll = function(x, y) { window.scrollBy(x, y); }; t.scrollTo = function(x, y) { window.scrollTo(x, y); }; }); (มีรหัสมากกว่านี้มาก แต่ก็เพียงพอที่จะแสดงปัญหา) ตอนนี้ฉันต้องการหยุดผู้ฟังเหตุการณ์ในบางกรณี ดังนั้นฉันจึงพยายามทำ removeEventListener แต่ฉันคิดไม่ออกว่าจะทำอย่างไร ฉันได้อ่านในคำถามอื่น ๆ ว่าไม่สามารถเรียก removeEventListener ในฟังก์ชันที่ไม่ระบุชื่อได้ แต่ในกรณีนี้ก็เป็นเช่นกันหรือไม่ ฉันมีวิธีการใน t ที่สร้างขึ้นภายในฟังก์ชันที่ไม่ระบุตัวตนดังนั้นฉันจึงคิดว่ามันเป็นไปได้ มีลักษณะดังนี้: t.disable = function() { window.document.removeEventListener("keydown", this, false); …

11
การกำหนดฟังก์ชันในผลลัพธ์ JSON ถูกต้องหรือไม่
ส่วนหนึ่งของการตอบสนอง JSON ของเว็บไซต์มีสิ่งนี้ (... เพิ่มสำหรับบริบท): {..., now:function(){return(new Date).getTime()}, ...} การเพิ่มฟังก์ชันที่ไม่ระบุชื่อให้กับ JSON นั้นถูกต้องหรือไม่ ฉันคาดว่าทุกครั้งที่คุณเข้าถึง 'เวลา' จะส่งคืนค่าที่แตกต่างกัน

5
เหตุใดจึงใช้นิพจน์ฟังก์ชันที่มีชื่อ
เรามีสองวิธีที่แตกต่างกันในการแสดงฟังก์ชันใน JavaScript: นิพจน์ฟังก์ชันที่ตั้งชื่อ (NFE) : var boo = function boo () { alert(1); }; นิพจน์ฟังก์ชันที่ไม่ระบุชื่อ : var boo = function () { alert(1); }; boo();และทั้งสองของพวกเขาสามารถเรียกว่ามี ฉันไม่เห็นว่าทำไม / เมื่อใดที่ฉันควรใช้ฟังก์ชันที่ไม่ระบุตัวตนและเมื่อใดที่ฉันควรใช้นิพจน์ฟังก์ชันที่มีชื่อ อะไรคือความแตกต่างระหว่างพวกเขา?

5
php is_function () เพื่อตรวจสอบว่าตัวแปรเป็นฟังก์ชันหรือไม่
ผมรู้สึกตื่นเต้นสวยที่จะอ่านเกี่ยวกับฟังก์ชั่นที่ไม่ระบุชื่อใน PHP ซึ่งช่วยให้คุณสามารถประกาศตัวแปรที่มีฟังก์ชั่นง่ายกว่าที่คุณจะทำอย่างไรกับcreate_function ตอนนี้ฉันสงสัยว่าฉันมีฟังก์ชันที่ส่งผ่านตัวแปรฉันจะตรวจสอบได้อย่างไรว่าเป็นฟังก์ชันหรือไม่ ยังไม่มีฟังก์ชัน is_function () และเมื่อฉันทำ var_dump ของตัวแปรที่เป็นฟังก์ชัน :: $func = function(){ echo 'asdf'; }; var_dump($func); ฉันได้รับสิ่งนี้: object(Closure)#8 (0) { } มีความคิดเกี่ยวกับวิธีตรวจสอบว่าเป็นฟังก์ชันหรือไม่?


4
วิธี removeEventListener ที่เป็น addEventListener พร้อมฟังก์ชัน anonymous?
function doSomethingWith(param) { document.body.addEventListener( 'scroll', function() { document.write(param); }, false ); // An event that I want to remove later } setTimeout( function() { document.body.removeEventListener('scroll', HANDLER ,false); // What HANDLER should I specify to remove the anonymous handler above? }, 3000 ); doSomethingWith('Test. ');

5
การใช้ "$ this" ในฟังก์ชันนิรนามใน PHP ก่อน 5.4.0
สถานะคู่มือ PHP ไม่สามารถใช้$thisจากฟังก์ชันนิรนามก่อน PHP 5.4.0 ในที่ไม่ระบุชื่อหน้าฟังก์ชั่น แต่ฉันพบว่าฉันสามารถทำให้มันทำงานได้โดยการกำหนดให้$thisกับตัวแปรและส่งผ่านตัวแปรไปยังuseคำสั่งที่นิยามฟังก์ชัน $CI = $this; $callback = function () use ($CI) { $CI->public_method(); }; นี่เป็นแนวทางปฏิบัติที่ดีหรือไม่? มีวิธีที่ดีกว่าในการเข้าถึง$thisฟังก์ชันนิรนามโดยใช้ PHP 5.3 หรือไม่?

3
เหตุใด "สิ่งนี้" ในฟังก์ชันที่ไม่ระบุตัวตนจึงไม่ถูกกำหนดเมื่อใช้อย่างเข้มงวด
ทำไม ฟังก์ชันนี้จึงไม่ระบุตัวตนเมื่อใช้จาวาสคริปต์ในโหมดเข้มงวด ฉันเข้าใจว่าเหตุใดสิ่งนี้จึงสมเหตุสมผล แต่ฉันไม่พบคำตอบที่เป็นรูปธรรม ตัวอย่าง: (function () { "use strict"; this.foo = "bar"; // *this* is undefined, why? }()); ทดสอบในซอ: http://jsfiddle.net/Pyr5g/1/ ตรวจสอบคนตัดไม้ (firebug)

3
ฟังก์ชันชวเลขที่ไม่ระบุชื่อ
มีบางอย่างที่ฉันไม่เข้าใจเกี่ยวกับฟังก์ชันที่ไม่ระบุชื่อโดยใช้สัญกรณ์สั้น ๆ # (.. ) ผลงานดังต่อไปนี้: REPL> ((fn [s] s) "Eh") "Eh" แต่สิ่งนี้ไม่: REPL> (#(%) "Eh") ใช้งานได้: REPL> (#(str %) "Eh") "Eh" สิ่งที่ฉันไม่เข้าใจคือทำไม(# (%) "เอ๊ะ")ไม่ทำงานและในขณะเดียวกันฉันก็ไม่จำเป็นต้องใช้str in ((fn [s] s) "เอ๊ะ") ทั้งสองเป็นฟังก์ชันที่ไม่ระบุตัวตนและทั้งคู่ใช้พารามิเตอร์เดียวที่นี่ เหตุใดสัญกรณ์ชวเลขจึงจำเป็นต้องมีฟังก์ชันในขณะที่สัญกรณ์อื่นไม่มี
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.