繁体   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