в PHP у нас есть аккуратное ключевое слово use
, позволяющее использовать "внешние" переменные при использовании закрытий, например:
$tax = 10;
$totalPrice = function ($quantity, $price) use ($tax){ //mandatory 'use'
return ($price * $quantity) * ($tax + 1.0);
};
Если мы опустим часть use ($tax)
, она выдаст ошибку, которую мне очень нравится.
Аналогично в С++ 11 мы делаем то же самое, указывая внешние переменные, называемые список захвата, с скобками:
float tax = 10;
auto totalPrice = [tax](int quantity, float price){ //mandatory []
return (price*quantity) * (tax + 1.0);
};
Как и в php, он выдаст ошибку, если список захвата опущен.
В Javascript у нас нет эквивалента этого ключевого слова use
(или С++ []), мы просто делаем:
var tax = 10;
var totalPrice = function (quantity, price){ //no need for 'use' or similar
return (price * quantity) * (tax + 1.0); //tax is usable here :(
};
Мне не нравится эта свобода, я предпочитаю указывать переменные, которые будут доступны функции закрытия или получить ошибку в противном случае по причинам, выходящим за рамки этого вопроса.
Итак, мне было интересно, есть ли специальное ключевое слово или оператор для этого в ES6, или на любом языке, который переводит на javascript? (CoffeeScript, TypeScript и т.д.). Если да, на каком языке и в каком синтаксисе?
В идеале я хотел бы обнаружить время трансляции (или раньше), когда переменная не была явно разрешена для использования в закрытии, что очень похоже на PHP/С++.
Заранее спасибо
PS: Пожалуйста, не спрашивайте меня, почему я хочу это на js-подобном языке, эта дискуссия - это еще одна тема.
EDIT: ЛИНТЕР, который выполняет эту проверку, также поможет