คำถามติดแท็ก iife

3
JavaScript พร้อมลงชื่อเข้าใช้ด้านหน้าของฟังก์ชันนิพจน์
ฉันกำลังมองหาข้อมูลเกี่ยวกับฟังก์ชั่นที่ถูกเรียกใช้ในทันทีและบางแห่งที่ฉันพบสัญกรณ์นี้: +function(){console.log("Something.")}() บางคนสามารถอธิบายให้ฉันฟังได้ว่าการ+ลงชื่อเข้าใช้ที่หน้าฟังก์ชันมีความหมายว่าอย่างไร


8
วัตถุประสงค์ของการห่อไฟล์ Javascript ทั้งหมดในฟังก์ชั่นที่ไม่ระบุชื่อเช่น“ (function () {…}) ()” คืออะไร?
ฉันได้อ่านจาวาสคริปต์จำนวนมากเมื่อเร็ว ๆ นี้และฉันได้สังเกตเห็นว่าไฟล์ทั้งหมดถูกห่อเหมือนไฟล์ต่อไปนี้ในไฟล์. js ที่จะนำเข้า (function() { ... code ... })(); อะไรคือเหตุผลในการทำสิ่งนี้มากกว่าฟังก์ชั่นคอนสตรัคเตอร์ที่เรียบง่าย?


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 …

3
ไวยากรณ์การเรียกใช้ฟังก์ชันทันที
มีตัวเลือกJSLintซึ่งเป็นหนึ่งใน The Good Parts ที่ "[ต้อง] parens สำหรับการเรียกใช้ทันที" ซึ่งหมายความว่าการก่อสร้าง (function () { // ... })(); จะต้องเขียนเป็น (function () { // ... }()); คำถามของฉันคือ - ใครสามารถอธิบายได้ว่าเหตุใดรูปแบบที่สองนี้จึงถือว่าดีกว่า มีความยืดหยุ่นมากขึ้นหรือไม่? เกิดข้อผิดพลาดน้อยกว่า? รูปแบบแรกมีข้อดีอย่างไร? ตั้งแต่ถามคำถามนี้ฉันได้เข้าใจถึงความสำคัญของการมีความแตกต่างทางภาพที่ชัดเจนระหว่างค่าฟังก์ชันและค่าของฟังก์ชัน พิจารณากรณีที่ผลลัพธ์ของการเรียกใช้ทันทีอยู่ทางขวามือของนิพจน์การมอบหมาย: var someVar = (function () { // ... }()); แม้ว่าวงเล็บด้านนอกสุดจะไม่จำเป็นทางไวยากรณ์ แต่วงเล็บเปิดจะให้การบ่งชี้ล่วงหน้าว่าค่าที่กำหนดไม่ใช่ฟังก์ชันเอง แต่เป็นผลลัพธ์ของฟังก์ชันที่เรียกใช้ สิ่งนี้คล้ายกับคำแนะนำของ Crockford เกี่ยวกับการใช้ตัวพิมพ์ใหญ่ของฟังก์ชันตัวสร้าง - มีไว้เพื่อใช้เป็นสัญญาณภาพสำหรับทุกคนที่ดูซอร์สโค้ด

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

6
รูปแบบ JavaScript นี้เรียกว่าอะไรและเหตุใดจึงใช้
ฉันกำลังศึกษาTHREE.jsและสังเกตเห็นรูปแบบที่มีการกำหนดฟังก์ชันดังนี้: var foo = ( function () { var bar = new Bar(); return function ( ) { //actual logic using bar from above. //return result; }; }()); (ตัวอย่างดูวิธีการ raycast ที่นี่ ) ปกติรูปแบบของวิธีการดังกล่าวจะมีลักษณะเช่นนี้ var foo = function () { var bar = new Bar(); //actual logic. //return result; }; การเปรียบเทียบเวอร์ชันแรกกับรูปแบบปกติเวอร์ชันแรกดูเหมือนจะแตกต่างกันในสิ่งนั้น: …

2
โหลดและใช้โมดูล JS ดั้งเดิม (เช่น IIFE) ผ่านการนำเข้าโมดูล ES6
ฉันมีฟังก์ชั่นIIFEสำหรับรหัสห้องสมุดบางส่วนในแอปพลิเคชันรุ่นเก่าที่ต้องทำงานกับ IE10 + (ไม่มีการโหลดโมดูล ES6 เป็นต้น) อย่างไรก็ตามฉันเริ่มพัฒนาแอป React ที่จะใช้ ES6 และ TypeScript และฉันต้องการใช้รหัสที่ฉันมีอยู่แล้วโดยไม่ต้องทำซ้ำไฟล์ หลังจากการวิจัยเล็กน้อยฉันพบว่าฉันต้องการใช้รูปแบบ UMD เพื่อให้ไฟล์ไลบรารีเหล่านี้ทำงานได้ทั้ง<script src=*>การนำเข้าและอนุญาตให้แอป React นำเข้าผ่านการโหลดโมดูล ES6 ฉันมาด้วยการแปลงต่อไปนี้: var Utils = (function(){ var self = { MyFunction: function(){ console.log("MyFunction"); } }; return self; })(); ถึง (function (global, factory) { typeof exports === 'object' && typeof module !== …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.