3

我想将一个函数传递给另一个函数。我认为像这样传递的函数是调用委托?我很难在网上为这种事情找到一个很好的解释。这是正确的方法吗?

function getCellContentByColumnIndex = function(row, index) {
    return $(row.children().get(index)).text();
}
function naturalSort(a, b, func) {
    //...
    var $a = func(a);
    var $b = func(b);
    //...
}

//usage  
naturalSort(x, y, getCellContentByColumnIndex);
4

4 回答 4

7

你的代码:

function getCellContentByColumnIndex = function(row, index) {
    return $(row.children().get(index)).text(); 
}

是语法错误。下面是一个函数声明:

functon foo() {}

这是一个函数表达式:

var foo = function(){}

这是一个命名函数表达式:

var foo = function bar(){}

这里有很多关于差异的答案,在“揭秘命名函数表达式”一文中有详细解释,其中还涵盖了函数声明和表达式的许多其他方面。

术语“匿名函数”是一个函数表达式的行话,它没有名称并且没有分配给任何东西,例如

someFn( function(){...} )

wheresomeFn被调用并传递了一个没有名字的函数。它可以在 中分配一个名称,也可以不分配someFn。Ic 可以被引用为arguments[0].

传递函数不是委派,这是将侦听器放在父元素上并捕获冒泡事件的做法的行话,在可以用单个侦听器替换表格中每个单元格上的点击侦听器的情况下,它是首选桌子。

无论如何,传递一个函数就像传递任何其他对象一样:

function foo(){
  alert('foo');
}

function callIt(fn) {
  fn();
}

callIt(foo);  // 'foo'

在上面,foo被传递callIt并分配给局部变量fn,然后被调用。

于 2012-06-23T14:31:23.957 回答
4

您将函数作为变量传递,如下所示:

var getCellContentByColumnIndex = function(row, index) {
    return $(row.children().get(index)).text();
}

function naturalSort(a, b, func) {
    //...
    var $a = func(a);
    var $b = func(b);
    //...
}

//usage  
naturalSort(x, y, getCellContentByColumnIndex);

这被称为使用匿名函数。

于 2012-06-23T14:15:57.077 回答
2

匿名函数..

var getCellContentByColumnIndex = function(row, index) {
    return $(row.children().get(index)).text();
}

会工作..其余的调用内容在您的代码中已经很完美了..:)

于 2012-06-23T14:15:32.910 回答
1

在 JavaScript 中,函数被视为一等公民,这意味着您可以像简单的变量一样到处乱扔它们。关键是,当你想引用函数时使用 FunctionName 并使用 FunctionName() 来调用它。

这一行:naturalSort(x, y, getCellContentByColumnIndex);

可以写成

naturalSort(x, y, function (){
    return $(row.children().get(index)).text();
});

在这种情况下,它会被称为传递匿名函数

于 2012-06-23T14:24:14.727 回答