javascript - 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 都有误解,希望能得到一些澄清。
解决方案
定义两者兼而有之,它声明函数(使签名已知)并定义它(提供实现)。在 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)
})()
推荐阅读
- vba - 将 Amazon Polly 与 VBA 集成
- node.js - 为什么回调不能与猫鼬 findOne 方法一起使用?
- android - 带有边框和背景的 Button 可绘制
- html - 如何在交换内容时使用锚点?
- c# - 抛出 system.exception.stackoverflowexception C#
- angular - 扩展 PrimeNG 组件
- laravel - Laravel 5.6 - 数据库选择调用数组上的成员函数 join()
- cors - 带有 XHR.withCredentials 的 npm 请求?
- java - java对arraylists是否有相当于mysql的限制和偏移量?
- firebase - 带 Firebase 的节点 MCU(ESP 8266)