Я не могу понять: «Функции в упрощенном JavaScript - это лямбды с лексическим ограничением». - PullRequest
2 голосов
/ 19 мая 2011

Я читаю книгу Дугласа Крокфорда "JavaScript: хорошие части". Я не могу понять предложение, что «Функции в упрощенном JavaScript - это лямбды с лексической областью видимости». Что это предложение хочет сказать нам? Как вы понимаете это предложение?

Большое спасибо!

Ниже приводится контекст этого предложения в книге:

Я хотел включить весь код для синтаксического анализатора в JavaScript, который анализирует JavaScript. Но моя глава была просто один из 30 или 40, поэтому я чувствовал себя стесненным в количестве страниц, которые я мог потребляют. Дальнейшее осложнение было что большинство моих читателей не будет иметь опыт работы с JavaScript, поэтому я также придется ввести язык и его особенности.

Итак, я решил установить язык. Таким образом, мне бы не пришлось разбирать весь язык, и мне бы не пришлось опишите весь язык. я звонил Подмножество Упрощенный JavaScript. Выбрать подмножество было легко: это включены только функции, которые я нужно было написать парсер. Вот как Я описал это в Beautiful Code:

Упрощенный JavaScript это просто хорошо вещи, в том числе:

Функции как первые объекты класса

Функции в упрощенном JavaScript - это лямбды с лексическим ограничением.

Динамические объекты с прототипом наследование

Объекты не имеют классов. Мы можем добавить новый член к любому объекту обычным назначение. Объект может наследовать члены из другого объекта.

Литералы объектов и литералы массивов

Это очень удобная запись для создание новых объектов и массивов. Литералы JavaScript были вдохновение для данных JSON формат обмена.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Он пытается объяснить природу объявления функций в JavaScript. Описывая их как «лямбды с лексической областью видимости», он ускользает от количества способов их использования. Вы можете, например, объявить их статически:

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.
});

Из-за гибкости, когда / как они объявлены, они выполняют ту же роль, что и лямбды во многих других языках (например, Python).

1 голос
/ 19 мая 2011

Лямбда-функция - это еще один термин для анонимной функции. Он говорит, что javascript поддерживает анонимные функции (вы можете создавать функции на лету, не называя их имен, например, var myVar = function () {...}). Лексическая область видимости относится к тому, как javascript обрабатывает область видимости. см .: http://en.wikipedia.org/wiki/Scope_%28computer_science%29#Lexical_versus_dynamic_scoping

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...