据我所知,IIFE看起来像这样。
(function() {
// Some code
})();
或者可能是
(function () {
...
}())
但我有一个类似于以下内容的js。
这些功能是IIFE吗?谁在打电话给他们?什么在调用它们?我可以放置调试器并调试方法。
(function (definition) {
"use strict";
if (typeof exports === "object" && typeof module === "object") {
module.exports = definition( require('./chartiq') );
} else if (typeof define === "function" && define.amd) {
define(["chartiq"], definition);
} else if (typeof window !== "undefined" || typeof self !== "undefined") {
var global = typeof window !== "undefined" ? window : self;
definition(global);
} else {
throw new Error("Only CommonJS, RequireJS, and <script> tags supported for quoteFeedSimulator.js.");
}
})
(function(_exports){
var CIQ=_exports.CIQ;
var quoteFeedSimulator=_exports.quoteFeedSimulator={}; // the quotefeed object
quoteFeedSimulator.generateGUID=function(){
.......
};
quoteFeedSimulator.maxTicks=50000;
// called by chart to fetch initial data
quoteFeedSimulator.fetchInitialData=function (symbol, suggestedStartDate, suggestedEndDate, params, cb) {
.......
};
// called by chart to fetch update data
quoteFeedSimulator.fetchUpdateData=function (symbol, startDate, params, cb) {
.......
};
// called by chart to fetch pagination data
quoteFeedSimulator.fetchPaginationData=function (symbol, suggestedStartDate, endDate, params, cb) {
.......
};
// utility function to format data for chart input; given simulator was designed to work with library, very little formatting is needed
quoteFeedSimulator.formatChartData=function (response) {
var feeddata=JSON.parse(response);
var newQuotes=[];
.......
return newQuotes;
};
return _exports;
});
答案 0 :(得分:2)
基本上它是一个IIFE,其中函数的参数本身就是一个函数。
移交函数是definition
,它保留了稍后调用的函数。
(function (definition) {
})(function(_exports) { /* ... */ });
答案 1 :(得分:1)
在上面的代码中,第一个匿名函数:
function (definition) {
...
}
接受第二个匿名函数:
function (_exports) {
...
}
作为一个论点。然后从第一个函数的主体内调用第二个函数,并将var global
作为参数从第一个函数的局部范围调用。正在发生的事情的简化版本:
// The following code will log 'hey'
(function(defenition) {
const global = 'hey';
definition(global);
)(function(_exports) {
console.log(_exports);
});
答案 2 :(得分:1)
IIFE - 立即调用函数表达式。它意味着我们需要时可以调用函数表达式中的函数。与我们使用回调一样。
这意味着我们在另一个函数中调用一个函数作为参数,这样我们就可以在其中使用该参数化函数。 这是一个例子。
//This is my callback function/ IIFE
function foo(param){
console.log("I am from foo - "+ param);
}
//I am creating another function who take foo function as a parameter.
(function(iamfoo){
iamfoo(1); //foo will call with param 1
console.log("I am calling foo"); // print this message
iamfoo(2); // agian foo will call with param 2
})(foo); // foo as a parameter
Output will be:
I am from foo - 1
I am calling foo
I am from foo - 2
我希望我澄清你的疑问。谢谢,让我知道你对此的疑问。