在
PHP中,我们有一个整洁的关键字,允许在使用闭包时使用“外部”变量,如下所示:
$tax = 10; $totalPrice = function ($quantity,$price) use ($tax){ //mandatory 'use' return ($price * $quantity) * ($tax + 1.0); };
如果我们省略使用($tax)部分,它会抛出一个错误,我非常喜欢.
类似地,在C 11中,我们也这样做,用括号指定外部变量,称为capture list:
float tax = 10; auto totalPrice = [tax](int quantity,float price){ //mandatory [] return (price*quantity) * (tax + 1.0); };
在Javascript中,我们没有这个使用关键字(或c [])的等价物,我们只做:
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 / C一样.
提前致谢
PS:请不要问我为什么要用类似js的语言来这个辩论是另一个话题.
编辑:执行此检查的短信也将有所帮助
解决方法
不幸的是,你可以想象出这个关键字使用在javascript中并不存在,但是要实现你正在寻找的结果有几种方法.
所以这是你的例子,其中totalPrice是一个功能,税是全球性的.
// Your example var tax = 10; var totalPrice = function (quantity,price) { return (price * quantity) * (tax + 1.0); }; var price = totalPrice(1,1); console.log ("Price YE is : " + price);
所以我认为,模拟更多关键字使用的解决方案可能是生成一个在子范围内初始化税并返回函数的函数:
// Example 1 return function function generatePriceCalculator(tax) { return function(quantity,price) { if ("undefined" === typeof tax) { throw "tax is undefined"; } return (price * quantity) * (tax + 1.0); }; }; var priceCalculator = generatePriceCalculator(20); var price1 = priceCalculator(1,1); console.log ("Price Example 1 is : " + price1);
正如你可以看到generatePriceCalculator在返回的函数中设置tax的值.
// Example 2 function return tax function getTax() { return 30; } var totalPrice2 = function (quantity,price) { var tax = getTax(); return (price * quantity) * (tax + 1.0); }; var price2 = totalPrice2(1,1); console.log ("Price Example 2 is : " + price2);
你可以在这里看到他们: