IIFE,JavaScript,函数未定义

3
这是我的 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(注:这是一个网站链接)
4个回答

3

您可以使用命名函数表达式从内部返回 test

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

1
那为什么不去掉 () 并将普通的 function 分配给 test 呢? - Tushar
我同意,但希望在声明时运行也是有道理的。你指出的与问题背后的原因有点相关,而不是我的答案。但正如我所说,我必须同意你的看法。 - axelduch

1
IIFE的结果将被赋值给test,显然这不是一个函数,因为你没有从IFEE中返回一个函数(或者其他任何东西)。保持简单;你想要的是一个命名函数,可以随时调用多次:
function test() {
    console.log('fire');
}
test();  // call as often as you want

0

正如错误所述

test() 不是一个函数

当您自我调用该函数时,结果将存储在test中。

为了能够将test作为函数使用并在其他地方重复调用,请勿自我调用。

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

或者让函数返回一个内部函数

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

0

类似这样的代码可以正常工作

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接