Является ли функция буквальным выражением? - PullRequest
0 голосов
/ 10 мая 2018

Фон

Выражение описывает вычисление и оценивается как значение.

> a=2                    // 2 is an expression in assignment statement
> 3                      // is an expression
> [1,2]                  // is an expression
> {'a':2, 'b':[1,2,3]}      // is an expression
> mul(add(4, mul(4, 6)), add(3, 5))   // is an expression
> let result = sum(1,2) // sum(1,2) is an expression in this assignment statement, only because it returns value 3
> console.log(materials.map(material => material.length)); // material => material.length is a sub-expression 
> console.log(materials.map(material => console.log('abc')));   //  material => console.log('abc') is not an expression
> Math.random()                // random() is a method expression
> console.log('xyz')           // log('xyz') is a method expression 
> new Date(2012, 11)           // is an expression

В приведенных выше примерах sum(1,2), material => material.length & mul(add(4 , mul(4, 6)), add(3, 5)) являются выражениями вызова, потому что они следуют этому правилу оценки:

Процедура оценки для выражений вызова:

  1. Оценивает оператор, а затем подвыражения операнда

  2. Применение функции, являющейся значением подвыражения оператора, к аргументам, являющимся значениями подвыражения операнда

material => console.log('abc') делаетне следует правилу оценки

Ответ говорит, что отсутствие различий между выражениями и командами обеспечивает концептуальное единообразие (см. Ссылочная прозрачность ) и снизу вверх структура.


Является ли функция буквальной (ниже)

   function(){
      console.log('output') 
    }

выражением в

let f = function(){
      console.log('output') 
    }

?Почему мы используем термин выражение функции ?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Первое, что нужно понять, это то, что в JavaScript функции носят много шляп:

  • Они являются "первоклассными гражданами", то есть они являются данными .Они могут быть сохранены, они могут быть переданы, и они могут быть назначены.
  • Они являются объектами.
  • Они являются вызываемыми единицами кода.

Итак, еслиВы принимаете, что следующие выражения являются выражениями:

3                      // is an expression
[1,2]                  // is an expression
{'a':2, 'b':[1,2,3]}   // is an expression 

Затем вы можете начать понимать, как:

let foo = function(){}

также является выражением - - выражением функции.Функция является значением .

С MDN :

Выражение функции очень похоже на иимеет почти такой же синтаксис, что и оператор функции (подробнее см. оператор функции).Основное различие между выражением функции и оператором функции заключается в имени функции, которое может быть опущено в выражениях функций для создания анонимных функций.Выражение функции можно использовать как IIFE (выражение для немедленного вызова функции), которое запускается сразу после его определения.См. Также главу о функциях для получения дополнительной информации.

И из MDN специально для выражений :

Выражения

Выражение - это любая допустимая единица кода, которая разрешается до значения.

Каждое синтаксически допустимое выражение разрешается до некоторого значения, но концептуально существует два типа выражений: с боковойэффекты (например, те, которые присваивают значение переменной) и те, которые в некотором смысле оценивают и, следовательно, разрешают значение.

Выражение x = 7 является примером первого типа.Это выражение использует оператор = для присвоения значения семь переменной x.Само выражение оценивается до семи.

Код 3 + 4 является примером второго типа выражения.Это выражение использует оператор +, чтобы сложить три и четыре вместе, не присваивая результату семь переменную.

JavaScript имеет следующие категории выражений:

  • Арифметика: вычисляется какномер, например 3.14159.(Обычно используются арифметические операторы.)
  • String: оценивается как строка символов, например, «Fred» или «234».(Обычно используются строковые операторы.)
  • Logical: оценивается как true или false.(Часто включает в себя логические операторы.)
  • Первичные выражения: основные ключевые слова и общие выражения в JavaScript.
  • Левые выражения: левые значения являются назначением назначения.

Поскольку функции являются значениями, они являются выражениями, не отличающимися от того, как 3 является выражением, поскольку 3 является значением.

0 голосов
/ 10 мая 2018

Да, это анонимное выражение функции , которое вы присваиваете переменной f. Другими примерами могут быть названное выражение функции и IIFE (немедленно вызванное выражение функции).

//anonymous function expression
var f = function() {
    return 1;
}
 
//named function expression
var g = function bar() {
    return 1;
}
 
//IIFE
(function helloWorld() {
    alert("Hello world!");
})();

В последнем примере вы видите, что ключевое слово function заключено в круглые скобки. Если бы не было круглых скобок, оно было бы рассмотрено как выражение вместо значения и привело бы к синтаксической ошибке.

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