call:foo(function(params){...});是什么意思?

时间:2011-07-19 18:39:04

标签: javascript function call

我知道正在声明并立即调用的函数,如此

(function(arg) {...}(value))();

但是这意味着什么:

functionName(function(params){...});

它位于Ace editor的demo / demo.js文件的(第一个非代码行)中,它是我遇到过的最糟糕的javascript代码。我想知道它是否真的写得不好,或者我是不是新手来破译它。

4 个答案:

答案 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();
}

现在调用了...