我正在阅读Douglas Crockford的书“JavaScript:The Good Parts”。我无法理解“简化JavaScript中的函数是带有词法作用域的lambdas”的句子。这句话想告诉我们什么?你怎么理解这句话?
非常感谢!
以下是本书中这句话的背景:
我想要包含所有代码 用于解析JavaScript的解析器 JavaScript的。但我的章节只是 30或40之一,所以我觉得受到限制 在我可以的页数 消耗。更复杂的是 我的大多数读者都没有 使用JavaScript的经验,所以我也是 必须介绍这种语言 及其特点。
所以,我决定将语言分组。 那样,我就不用解析了 整个语言,我不必 描述整个语言。我打了电话 子集简化的JavaScript。 选择子集很简单:它 仅包括我的功能 需要编写解析器。这是怎么回事 我在美丽的代码中描述了它:
简化的JavaScript就是好事 东西,包括:
作为最强的类对象的功能
简化JavaScript中的函数是带有词法作用域的lambda。
具有原型的动态对象 继承
对象是无类的。我们可以添加一个 普通的任何对象的新成员 分配。对象可以继承 来自另一个对象的成员。
对象文字和数组文字
这是一个非常方便的表示法 创建新对象和数组。 JavaScript文字是 JSON数据的灵感来源 交换格式。
答案 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