关闭:等效于JavaScript中的“使用”关键字或C捕获列表或透明语言

前端之家收集整理的这篇文章主要介绍了关闭:等效于JavaScript中的“使用”关键字或C捕获列表或透明语言前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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);
};

如在PHP中,如果忽略捕获列表,它将抛出错误.

在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);

你可以在这里看到他们:

https://jsfiddle.net/jo9yzoke/1/

猜你在找的JavaScript相关文章