0

这两个功能是否有名称或术语?我确定他们会这样做,但不知道要搜索什么。

// edit: thanks to Bergi: 
// this is a function with `no free variables` (outer variables)

function add (a, b) { return a + b }

// edit: thanks to Bergi: 
// this is a function with `free variables` (b) if you didn't know that

var b = 2
function add (a) { return a + b }

如果一个函数超出了它自己的范围,它会被称为特殊的东西吗?你怎么称呼不使用任何超出其自身范围的函数?


我想向某人解释的是,如果我在哪里编写导出两个辅助函数的实用程序文件

// util
function divide (a, b) {
  return a / b
}

function half (a) {
  return divide(a, 2)
}

export {
  divide,
  half
}

然后在另一个文件中我只会使用除法功能

import { divide } from util

然后 WebPack/rollup 将能够摇树并丢弃half最终包中的功能

但是如果half从实用程序文件中导入函数的位置

import { half } from util

但是真的不需要divide我的主脚本中的函数我最终会在我的包中同时拥有这两个函数,因为half取决于divide

如果我将函数更改为不使用它自己的范围之外的任何变量,如下所示:

function half (a) {
  return a / 2
}

那么它将是“依赖”免费的。

4

1 回答 1

1

如果一个函数超出了它自己的范围,它会被称为特殊的东西吗?

我们称它们为闭包。它有一个自由变量,它在 JS 中是在范围内按词法查找的。

然而,虽然从技术上讲,JavaScript 中的每个函数都是一个闭包,但这可能不是您想要使用的术语;大多数人将它与动态创建的函数相关联,这对于模块级函数来说很奇怪。

你怎么称呼不使用任何超出其自身范围的函数?

没有自由变量的函数”适合。

于 2018-09-02T20:25:39.527 回答