我不熟悉JavaScript(来自Java),并且想了解此功能
(function (global, factory) {
if (typeof define === 'function' && define.amd) {
define(['../numeral'], factory);
} else if (typeof module === 'object' && module.exports) {
factory(require('../numeral'));
} else {
factory(global.numeral);
}
}
它来自这个github页面https://github.com/adamwdraper/Numeral-js/blob/master/src/formats/currency.js
我的问题是:为什么没有以global
和factory
作为参数的函数的名称?
我期望的是这样的:
function myFunction(p1, p2) {
return p1 * p2; // The function returns the product of p1 and p2
}
在这里,我们有一个名称myFunction
,但是在上面的示例中,我们没有该函数的名称。为什么?为什么在JavaScript中允许这样做?
答案 0 :(得分:2)
是的。它们在Javascript中称为匿名函数。
通常,这些函数作为对另一个函数的回调提供。
或者可以像杰克在回答中所说的那样立即调用它们。
答案 1 :(得分:1)
这是因为它位于IIFE中-您无需命名函数,而命名的唯一实际用途就是递归。
是这样的:
var func = function (global, factory) {
if (typeof define === 'function' && define.amd) {
define(['../numeral'], factory);
} else if (typeof module === 'object' && module.exports) {
factory(require('../numeral'));
} else {
factory(global.numeral);
}
}
您这样称呼它:
(func)();
或者:
func();
这是一个函数表达式-它没有名称,而是分配给一个命名变量。未命名函数称为匿名函数,您可以将它们用作测试/回调函数。
答案 2 :(得分:1)
匿名函数就是这样,没有名称的函数。不能像通常使用函数那样通过名称来调用它们。实际上,我们在javascript中经常使用它们。
它的常见用法是将另一个函数作为参数的函数,例如.sort()
。排序使您可以传递自定义函数来处理排序逻辑,因此使用匿名函数,它会像这样:
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
//[1, 2, 3, 4, 5]
查看如何将函数作为唯一要排序的参数传递。与此等效的内容也可能像这样:
var numbers = [4, 2, 5, 1, 3];
var mySortFunction = function(a, b){
return a - b;
}
numbers.sort(mySortFunction);
//[1, 2, 3, 4, 5]
匿名函数只是一种干净快捷的方法,可以创建您不会在代码中重复使用的函数。