首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript IIFE 內部函數表達式未執行:定義 ≠ 調用、閉包捕獲與手動調用示範

     編輯:程式設計綜合問答

原始代碼


var aaa = (function() {
    var bbb = function() { /* ... */ };
})();
// 預期 bbb 執行,實際未執行

原因

  • var bbb = function() {} **僅定義** 函數物件並賦值給區域變數 bbb。
  • 函數定義**不會自動執行**,必須顯式呼叫 bbb()。
  • IIFE 結束後,bbb 成為閉包內的私有變數,外部無法訪問。

修正:在 IIFE 內主動調用


var aaa = (function() {
    var bbb = function() { alert('bbb executed'); };
    bbb(); // ← 顯式調用
})();
// 頁面載入即彈出 "bbb executed"

進階:將內部函數暴露給外部 (模組模式)


var Module = (function() {
    var privateVar = 0;
    function privateFn() { console.log('private'); }

    return {
        publicFn: function() {
            privateFn();
            return ++privateVar;
        }
    };
})();

Module.publicFn(); // 可調用內部私有函數

常見誤區對照

代碼行為
var fn = function() {}定義函數,**不執行**
var fn = function() {}()語法錯誤 (需包裝 (function(){})())
(function() {})()定義並**立即執行** (IIFE)
var fn = (function() { return function(){} })()IIFE 返回函數,**未執行**返回的函數
var fn = (function() { return function(){} })()()IIFE 返回函數並**立即執行**該返回函數
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved