【问题标题】:Is an anonymous function as a parameter a function declaration or a function expression?作为参数的匿名函数是函数声明还是函数表达式?
【发布时间】:2020-05-27 06:44:50
【问题描述】:

假设 函数声明 是一个语句,其中 function 关键字是语句的第一个单词,例如:

function() { console.log("foo") };

假设一个函数表达式是例如以下:

对于一个命名函数

var func = function doSomething() { console.log("foo") };

对于匿名函数

var func = function() { console.log("foo") };

匿名函数是什么情况,下例中作为参数传入:

for (let i = 0; i < 5; i++) {
    setTimeout(function() { console.log(i); }, 200); 
};

这是一个函数声明还是一个函数表达式,因为它被分配给WindowOrWorkerGlobalScope的setTimeout方法的参数变量

【问题讨论】:

  • 它们不是语句,因此它们是表达式。
  • 你不能在另一个语句中写一个语句;它只能是一个表达式。
  • # 响应如果你真的知道你需要清楚了解javascript运行时引擎是如何工作的。 ##详细视频youtu.be/QyUFheng6J0
  • var func = …; 不是函数表达式,它是带有初始化程序的变量声明 - 语句。只有function() {…} 部分是其中的表达式。是的,在参数位置上也是一样的。

标签: javascript anonymous-function function-declaration function-expression


【解决方案1】:

显然是函数表达式

来自 MDN

Function expression

function 关键字可用于在表达式中定义函数。


语法

let myFunction = function [name]([param1[, param2[, ..., paramN]]]) {
   statements
};

函数表达式非常相似并且几乎相同 语法作为函数声明(详见函数声明)。 函数表达式和函数的主要区别 声明是函数名,函数中可以省略 表达式来创建匿名函数。函数表达式可以 用作 IIFE(立即调用函数表达式) 定义后立即运行。另见关于函数的章节 了解更多信息。



Function declaration

语法

function name([param[, param,[..., param]]]) {
   [statements]
}

【讨论】:

    猜你喜欢
    • 2012-11-19
    • 2018-08-16
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多