我无法理解“简化JavaScript中的函数是带有词法范围的lambdas。”

时间:2011-05-19 15:20:20

标签: javascript function lambda

我正在阅读Douglas Crockford的书“JavaScript:The Good Parts”。我无法理解“简化JavaScript中的函数是带有词法作用域的lambdas”的句子。这句话想告诉我们什么?你怎么理解这句话?

非常感谢!

以下是本书中这句话的背景:

  

我想要包含所有代码   用于解析JavaScript的解析器   JavaScript的。但我的章节只是   30或40之一,所以我觉得受到限制   在我可以的页数   消耗。更复杂的是   我的大多数读者都没有   使用JavaScript的经验,所以我也是   必须介绍这种语言   及其特点。

     

所以,我决定将语言分组。   那样,我就不用解析了   整个语言,我不必   描述整个语言。我打了电话   子集简化的JavaScript。   选择子集很简单:它   仅包括我的功能   需要编写解析器。这是怎么回事   我在美丽的代码中描述了它:

     

简化的JavaScript就是好事   东西,包括:

     

作为最强的类对象的功能

     

简化JavaScript中的函数是带有词法作用域的lambda。

     

具有原型的动态对象   继承

     

对象是无类的。我们可以添加一个   普通的任何对象的新成员   分配。对象可以继承   来自另一个对象的成员。

     

对象文字和数组文字

     

这是一个非常方便的表示法   创建新对象和数组。   JavaScript文字是   JSON数据的灵感来源   交换格式。

2 个答案:

答案 0 :(得分:2)

他试图解释JavaScript中函数声明的本质。通过将它们描述为“具有词汇范围的lambdas”,他躲避了可以使用它们的方式。例如,您可以静态声明它们:

function myFunc(arg) {
  // do something
}

您可以将它们存储在变量中:

var myFunc = function(arg) {
  // do something
};

您可以将它们用作对象属性(方法):

var myObject = {
  myMethod: function (arg) {
    // do something
  }
};

或者您可以在将它们传递到某处时声明它们(在使用jQuery时非常常见):

$('.myClass').click(function () {
  // do something when an element with class "myClass" is clicked.
});

由于它们在何时/如何声明时具有灵活性,因此它们填充了lambdas在许多其他语言中所起的相同作用(例如Python)。

答案 1 :(得分:1)

lambda函数是匿名函数的另一个术语。他说javascript支持匿名函数(你可以动态创建函数而不给它们命名,比如var myVar = function(){...})。词法范围是指javascript如何处理范围。见:http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_versus_dynamic_scoping