Как вы называете функцию, которая использует вещи вне функции и функции, которая является автономной? - PullRequest
0 голосов
/ 02 сентября 2018

Доза эта две функции имеют имя или термин? Я уверен, что они делают, но не знают, что искать.

// 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
}

тогда это будет "свободная зависимость".

1 Ответ

0 голосов
/ 02 сентября 2018

Называется ли это чем-то особенным, если функция выходит за пределы своей области видимости?

Мы называем их замыканиями . У него есть свободная переменная , которая в JS ищется лексически в области видимости.

Однако, хотя технически каждая функция является закрытием в JavaScript, это, вероятно, не тот термин, который вы хотите использовать; большинство людей связывают его с динамически создаваемыми функциями, что было бы странно для функции уровня модуля.

Как вы называете функцию, которая ничего не использует вне своей области видимости?

Подходит " функция без свободных переменных ".

...