簡體   English   中英

IIFE,javascript,函數undefined

[英]IIFE, javascript, function undefined

這是我的IIFE功能

var test = function(){
  console.log('fire');
}();

它在開始時調用。 但是我該怎么稱呼呢?

var fireTestFn = function(){
   test();
}

fireTestFn(); // test() is not a function

JSbin https://jsbin.com/cesuzimogu/edit?js,console

您可以使用命名函數表達式從內部返回test

var test = function fn(){
  console.log('fire');
  return fn;
}();

IIFE 的結果將被分配給test ,這顯然不是一個函數 ,因為你沒有從IFEE返回一個函數(或者任何東西)。 把事情簡單化; 你想要的是一個命名函數,你可以隨時調用任意次數:

function test() {
    console.log('fire');
}
test();  // call as often as you want

正如錯誤所說

test()不是函數

當您自行調用該函數時, 結果存儲到test

為了能夠將test用作函數並在其他地方重復調用,請不要自行調用

var test = function(){
  console.log('fire');
};

或者讓函數返回一個內部函數

var test = function () {
    return function () {
        console.log('fire');
    }
};

test不是函數,它是undefined 由於您沒有從匿名函數返回任何內容,因此默認情況下將返回undefined 所以,當你調用test()時會出現錯誤

TypeError:test不是函數

IIFE應括在括號內()

  1. 您需要在()包裝您的匿名函數以使其成為IIFE
  2. 您需要從中返回一個函數,以便test將是該函數

演示

 var test = (function() { return function() { document.write('fire'); }; }()); var fireTestFn = function() { test(); } fireTestFn(); 

這樣的東西會起作用

var myNamespace = {};

(function(ns) {
    ns.test = function(){
      console.log('fire');
    };

    /*ns.myOtherFunction = function(var1) { }*/
})(myNamespace);

var fireTestFn = function(){
   myNamespace.test();
};

fireTestFn();

請參見此處的示例: https//jsbin.com/helumoveqe/edit?js,console

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM