调用foo(function(params){..})的含义是什么?

What is the meaning of call: foo(function(params){...});

本文关键字:是什么 foo function params 调用      更新时间:2023-09-26

我知道函数被声明并立即调用,像这样

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

但是这是什么意思呢:

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

它在Ace编辑器的demo/demo.js文件(第一个非代码行)中,这是我遇到过的最糟糕的javascript代码。我想知道它是真的写得很差,还是我太新手了,看不懂。

在本例中

outerFunc(function(params) { ... })

在一个匿名函数中包含其模块的定义,outerFunc使用该函数来控制其定义方式。在你提到的代码中,他们使用RequireJS中的define函数来做一些事情,包括指定依赖关系和执行上下文。

define()是CommonJS模块规范的一部分,需要在您使用的不同JavaScript平台上以不同的方式实现。这个代码设计非常合理;它遵循了将来可能成为该语言核心部分的拟议规范。

将匿名函数传递给函数functionName()

如果它写得很差,或者你太新手,那就看情况了,因为它可能只是这种风格的一个合法的好用法。

编码不差。这是一个传递给函数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,它适用于所有可能的对象,只要调用者为该类型的对象提供一个比较函数。

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

...现在被调用了