Javascript - 箭头功能问题

时间:2016-10-15 09:48:44

标签: javascript

我是Javascript的初学者,我的老师给了我这段代码:

var z = (x=>(y=>2*y)(x)+3)(5);

(抱歉我的英语,我是一个英语水平不高的法国人^^)

我必须用简单的函数重写这段代码,但我不确定自己。

对我来说,我可以重写这段代码,如:

var x = 5;
var y = 2 * x;
var z = y + 3;

但是,它不是用简单函数重写的。

我的问题是:你能帮助我理解箭头函数在这种情况下是如何工作的吗?让我知道如何用简单的函数重写这段代码。

2 个答案:

答案 0 :(得分:-1)

具有a => b形式的箭头函数在调用时隐式返回b。你可以想象他们:

function (a) { return b }

此外,您的代码示例包含在()中并立即调用,模式称为Immediately Invoked Function Expression (IIFE)

(a => b)(3)

相同
(function (a) { return b })(3)

两个函数都被立即定义和调用,因此名称。

现在你所要做的就是使用箭头函数的这两个想法,隐式返回和IIFE,将你的例子重写为具有显式返回和常规IIFE的普通函数。

换句话说:

  1. 添加假定存在的return语句(隐含在箭头函数中)

  2. 在每个箭头功能的参数周围添加function()

  3. 以下简单英语代码示例中发生了什么:

    • 5传递到IIFE,其中x
    • x传递给另一个采用y
    • 的IIFE
    • 从第二届IIFE返回2 * y
    • 3添加到第二个IIFE返回的内容
    • 从第一个IIFE返回结果

    或者作为数学公式:

    z = x = (2 * y) + 3
    

答案 1 :(得分:-1)

我们有:

var z = (x=>(y=>2*y)(x)+3)(5);

箭头功能定义表明x=>(....)表示(function(x){ return ...})

所以

var z = (function(x) {
    return (y=>2*y)(x)+3;
})(5);

我们现在有另一个箭头函数y=>2*y,这意味着(function(y) { return 2*y})

所以

var z = (function(x) {
    return (function(y) {
            return 2*y;
        })(x) + 3;
})(5);

这就是全部。

请记住,(function(){})()它是一个立即执行的匿名函数声明。所以最后,var z是一个简单的数字。