高级参数用法

时间:2009-06-26 05:38:40

标签: javascript parameters mootools anonymous-function

//This is the function that will run every time a new item is added or the 
//list is sorted.
var showNewOrder = function() {
    //This function means we get serialize() to tell us the text of each 
    //element, instead of its ID, which is the default return.
    var serializeFunction = function(el) { return el.get('text'); };
    //We pass our custom function to serialize();
    var orderTxt = sort.serialize(serializeFunction);
    //And then we add that text to our page so everyone can see it.
    $('data').set('text', orderTxt.join(' '));
};

完整代码位于http://demos.mootools.net/Dynamic.Sortables

var serializeFunction = function(*el*) { return el.get('text'); };
var orderTxt = sort.serialize(serializeFunction*(el)*);

比较代码

是否被传递?发生了什么???

我想学习高级参数用法。

如果没有声明“函数名称(参数1,参数2,参数3 ......)”之类的函数。 如果没有调用“name(parameter1,parameter2,parameter3 ...)”之类的函数。 如果参数不是变量。

如果声明像“function(parameter1,parameter2,parameter3 ...)”这样的函数。 如果调用函数如“variable(parameter1,parameter2,parameter3 ...)”。 如果参数是对象。

我很感兴趣。

你可能有一个书签上有我感兴趣的课程...请分享!!!

3 个答案:

答案 0 :(得分:1)

分配给“serializeFunction”的值实际上是一个匿名函数,你可以看到它像指针或对函数的引用,“el”只是一个声明的输入参数,将被使用然后该函数将被调用。

查看发布的original codesort.serialize函数的调用,只接收函数作为参数,“serializeFunction”没有被调用,它只被传递为一个论点。

因此,接收作为参数传递的函数引用的serialize函数将负责在内部执行它。

答案 1 :(得分:0)

这是一个lambda表达式,如。

sort.serialize()

接受函数作为参数,而不是值。

答案 2 :(得分:0)

第一个代码可能是正确的。

在JavaScript中,函数与任何其他值一样存储在变量中(如serializeFunction所示),而sort.serialize仅引用serializeFunction。然后使用当前元素serializeFunctionsort.serialize调用el

第二个代码会向undefined发送serializeFunction值(因为el尚未在该范围内定义),这会产生错误。即使定义了elsort.serialize也需要引用函数,而不是值。