我知道正在声明并立即调用的函数,如此
(function(arg) {...}(value))();
但是这意味着什么:
functionName(function(params){...});
它位于Ace editor的demo / demo.js文件的(第一个非代码行)中,它是我遇到过的最糟糕的javascript代码。我想知道它是否真的写得不好,或者我是不是新手来破译它。
答案 0 :(得分:2)
在这种情况下,
outerFunc(function(params) { ... })
在匿名函数中包含其模块的定义,outerFunc
用于控制它的定义方式。在the code you're referring to中,他们使用RequireJS中的define
函数执行多项操作,包括指定依赖项和执行上下文。
define()
是CommonJS模块规范的一部分,需要在您使用的不同JavaScript平台上以不同方式实现。这个代码设计更合理;它遵循的建议规范可能是未来语言的核心部分。
答案 1 :(得分:2)
将匿名函数传递给函数functionName()
。
如果写得不好,或者你太新手,那取决于,因为它可能只是这种风格的合法使用。
答案 2 :(得分:0)
编码不好。这是一个传递给函数functionName
的匿名函数。该函数将具有functionName的本地名称,并且可以在其中调用。在很多情况下,这非常有用。
sort(my_arr, function(obj1, obj2){
return obj1.age*obj1.color - obj2.age*obj2.color;
}
);
function sort(arr, compare){
// Sorts arr of objects using compare(arr[i], arr[j]);
}
这将允许您实现单个排序函数sort
,该函数适用于所有可能的对象,只要调用者为该类型的对象提供比较函数。
答案 3 :(得分:0)
(function(arg) {...}(value));
这不是函数调用。你可能意味着(function(params) {...}(value))(someArgs);
。
functionName(function(params){...});
这是对函数functionName
的调用,将该匿名函数作为参数传递。
这(基本上)与:
相同var f = function(params) { ... };
functionName(f);
或:
function f(params) { ... };
functionName(f);
考虑:
function functionName(f) {
f();
}
现在调用了...
。