您怎么称呼使用功能之外的东西的功能和自包含的功能?

时间:2018-09-02 19:41:50

标签: javascript webpack rollup tree-shaking

这两个函数有名称还是术语?我确定他们会这么做,但是不知道要搜索什么。

// 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 /汇总将能够摇晃树并丢弃最终捆绑包中的half功能

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

import { half } from util

但是实际上并不需要我的主脚本中的divide函数,因为half依赖于divide

,我最终还是会在包中同时拥有这两个函数

如果我将函数更改为不使用超出其自身作用域的任何变量,例如:

function half (a) {
  return a / 2
}

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

1 个答案:

答案 0 :(得分:1)

  

如果函数超出了自己的范围,它是否会调用特殊的东西?

我们称它们为closures。它有一个free variable,在JS中会在范围内按词法查找它。

但是,在JavaScript中,technically every function is a closure可能不是您要使用的术语;大多数人将其与动态创建的函数相关联,这对于模块级函数来说很奇怪。

  

您称什么为不使用超出其自身范围的函数的函数?

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