Javascript匿名函数用例

时间:2012-05-16 12:37:50

标签: javascript anonymous-function

我正在通过Eloquent Javascript工作,我遇到了一个代码片段,如下所示:

function greaterThan(x) {
  return function(y) {
    return y > x;
  };
}

var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));

是否有任何真正的用例来定义这样的函数,并在其中使用匿名函数?这样做会不会简单得多:

function greaterThan(x,y){
  return x > y;
}

var greaterThanTen = greaterThan(9, 10);

任何想法/意见/建议都会非常有用。

4 个答案:

答案 0 :(得分:3)

This is an example of a "closure"。基本上,对greaterThan()的调用会为您提供一个功能。该函数不仅仅是一个函数,而是带有x的值 - 就像将x的值永久地嵌入到函数中一样。

function obj(x) {

    //"public interface"
    //only these are exposed (inc and getX). x is private.
    return {
        inc: function() {
            return ++x;
        },
        getX: function() { //a getter function to retrieve private x
            return x;
        }
    }
}

//the value 10 is "embedded" to the returned object
var myobj = obj(10);

//every call to inc increments that "embedded" value
console.log(myobj.inc()); //11
console.log(myobj.inc()); //12
console.log(myobj.inc()); //13

//but you can never access the variable of `x` directly without a "getter"
console.log(myobj.getX());​

闭包是JavaScript的一大特色。其中一个很好的用途是模拟私有变量。

答案 1 :(得分:1)

您正在组合函数的第一个示例。

当然你可以用不同的方式写作,但第一个例子中的greaterThanTen的想法是不同的。例如,您可以将其传递给过滤器

var a = [ 1 , 10, 100 , 9, 43 ];

function greaterThan(x) {
  return function(y) {
    return y > x;
  };
}
var greaterThanTen = greaterThan(10);
a.filter(greaterThanTen);

返回[100,43]

这是函数式编程。有很多好处。

答案 2 :(得分:0)

除非我遗漏了某些内容,否则第一个代码会返回一个函数。 第二个返回结果。

答案 3 :(得分:0)

这不是一个特别好的用例。匿名函数的一个更好的用例是回调,如下所示:一旦函数#1完成,你希望执行函数#2。

function a(param1, param2, callback) {
    //work on param1 and param2 here
    callback.call(); //triggers the callback function
}