函数文字是一个表达式吗?

时间:2018-05-10 18:08:09

标签: javascript ecmascript-6 expression

背景

  

表达式描述计算并计算为值。

> 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.   
  3. 将作为operator子表达式值的函数应用于作为操作数子表达式值的参数

  4.   

material => console.log('abc')未遵循评估规则

Answer说,表达式和命令之间缺乏区别可以实现概念统一(参见Referential transparency)和bottom-up结构。

是函数文字(下)

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

中的表达式
let f = function(){
      console.log('output') 
    }

?为什么我们使用术语function expression

2 个答案:

答案 0 :(得分:3)

是的,它是匿名函数表达式,您可以将其分配给变量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关键字包含在括号中。如果没有括号,则将其视为语句而不是值,并会产生语法错误。

答案 1 :(得分:2)

首先要理解的是,在JavaScript中,函数会戴上很多帽子:

  • 他们是"一等公民",即他们是数据。它们可以存储,可以传递,也可以分配。
  • 他们是对象。
  • 它们是可调用的代码单元。

所以,如果您接受以下表达式:

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

然后,您可以开始了解如何:

let foo = function(){}

也是一个表达式 - 一个函数表达式。函数是值

来自 MDN

  

函数表达式非常相似且几乎相同   语法作为函数语句(有关详细信息,请参阅函数语句)。   函数表达式和函数之间的主要区别   statement是函数名,可以在函数中省略   用于创建匿名函数的表达式。函数表达式可以   用作运行的IIFE(立即调用的函数表达式)   一旦定义。另见有关函数的章节   更多信息。

来自MDN specifically on Expressions

  

表达式

     

表达式是解析为值的任何有效代码单元。

     

每个语法上有效的表达式都会解析为某个值但是   从概念上讲,有两种类型的表达方式:副作用   (例如:为变量赋值的那些)和那些在变量中的变量   某种意义上的评价并因此决定一个价值。

     

表达式x = 7是第一种类型的示例。这个表达   使用=运算符将值7赋给变量x。该   表达式本身的评估结果为7。

     

代码3 + 4是第二种表达类型的示例。这个   表达式使用+运算符将三个和四个一起添加   将结果七分配给变量。

     

JavaScript具有以下表达式类别:

     
      
  • 算术:求值为数字,例如3.14159。 (通常使用算术运算符。)
  •   
  • 字符串:计算为字符串,例如" Fred"或" 234"。 (通常使用字符串运算符。)
  •   
  • 逻辑:计算结果为true或false。 (通常涉及逻辑运算符。)
  •   
  • 主要表达式:JavaScript中的基本关键字和一般表达。
  •   
  • 左侧表达式:左侧值是作业的目的地。
  •   

由于函数 值,它们是表达式,与表达式3的方式没有什么不同,因为3是一个值。