如何在javascript中将变量用作函数?
我正在尝试学习 express.js,然后我遇到了这些语句。
const express = require('express');
const app = express();
那么现在如何将这个变量“express”写成“express()”。是否可以使用任何类型的变量来做到这一点?
回答
函数是 JavaScript 中的一流对象,它们不像其他语言那样特殊。它们只是可调用的对象。由于它们是对象,因此您可以传递它们:
function example() {
console.log("Hi there");
}
const e = example;
e(); // "Hi there"
您还可以为它们添加其他属性(Express 也可以这样做)。下面是一个例子:
function example() {
console.log("Hi there");
}
example.prop = 42;
const e = example;
e(); // "Hi there"
console.log(example.prop); // 42
console.log(e.prop); // 42 -- since `e` and `example` both refer to the same function
是否可以使用任何类型的变量来做到这一点?
JavaScript 变量没有强类型语言中的类型。变量持有的值有类型,但变量没有;一个变量可以保存一个数字,接下来是一个字符串,之后是一个函数......
function example() {
console.log("Hi there");
}
let e = example;
e(); // "Hi there"
e = 42;
console.log(e); // 42
e = "Hi there";
console.log(e); // "Hi there"
如果您希望变量、参数等具有类型(因此您不能将字符串放入预期包含数字的变量中),请考虑使用 TypeScript、Flow,甚至只是结合了强大的 IDE 支持的 JSDoc。这些在 JavaScript 之上(在不同程度上)分层了一个类型系统。
回到你的问题:你可以用任何变量来做,但不能用任何类型的值。您不能拨打号码:
let e = 42;
e(); // TypeError: e is not a function
您只能调用函数或其他主机提供的可调用对象¹(它们不一定是真正的函数,但现在主机提供不是实际函数的可调用对象的情况并不常见,这是有问题的)。
¹ 具体而言,在规范方面,任何支持[[Call]] 内部操作的对象。