首页 > 解决方案 > JavaScript 中的一等函数和 C++ 中的函数声明

问题描述

我来自一点 C++ 背景,但想了解 JavaScript 中的函数。我的问题用粗体表示。

在 C++ 中,函数声明和定义是不同的。我收集到的是,在 JavaScript 中称为函数声明是 C++ 中的函数定义,因此 JavaScript 中不存在 C++ 风格的函数声明。这个对吗?

我在 JavaScript 中尝试了这样的 C++ 风格的函数声明:

function randomFunction(arg1, arg2);

并得到一个错误:

function randomFunction(arg1, arg2);
                                   ^

SyntaxError: Unexpected token ';'

现在,如果在 JavaScript 中,一等函数意味着函数可以被视为变量,为什么我们不能编写如下函数:

function randomFunction(arg1, arg2);

但我们能做到吗?

let var1;

在这种情况下,函数似乎不像变量。我错过了什么?

在我看来let var1,JavaScript 不知道要分配多少空间,这与 C++ 中的函数声明类似。是因为函数提升不需要函数声明吗?

我可能对 C++ 和 JavaScript 都有误解,希望能得到一些澄清。

标签: javascriptc++

解决方案


定义两者兼而有之,它声明函数(使签名已知)并定义它(提供实现)。在 JavaScript 中,你没有单独的声明,因为你有提升,在 C++ 中,你需要一个单独的声明,在某些情况下,因为函数在声明之前是未知的/不能使用。

命名函数类似于变量,因为您可以更改函数名称所指的内容,并且它定义了该名称的范围:

(function() {
  "use strict"
  function randomFunction(arg1, arg2) {}

  randomFunction = 1;
  console.log(randomFunction)
})()

所以使用函数名randomFunction的方式类似于randomFunction变量:

(function() {
  "use strict"
  var randomFunction = function(arg1, arg2) {}

  randomFunction = 1;
  console.log(randomFunction)
})()


推荐阅读