嵌套函数,非定义变量-Javascript

时间:2017-02-25 05:34:21

标签: javascript

我正在学习javascript而且我找到了这个练习:

function abc(a){
    return(function(y){
    return y--**--y+1;
  })(++a)+a;
}
document.write(abc(2));

那个输出是7,我不明白为什么,我搜索了有关嵌套函数的信息,但我没找到任何东西......

如何定义“y”?

3 个答案:

答案 0 :(得分:2)

此功能转换为:

//I've replaced the arguments and the vars with the actual values
function abc(){
    function innerFunction(){
        return (3 ** 1) + 1
    }
    return innerFunction(3) + 3
}

//or written differently
function abc(a){
    function innerFunction(v){
        //v--
        var tmp1 = v;
        v = v-1;

        //--v
        v = v-1;
        var tmp2 = v;

        return Math.pow(tmp1, tmp2) + 1;
    }

    a = a+1; //++a
    return innerFunction(a) + a;
}

答案 1 :(得分:0)

这很容易。 功能abc return (function(y){ return y--**--y+1; })(++a)+a 这意味着如果a是2 (function(3){ return y--**--y+1; }) + 2

答案 2 :(得分:0)

这包含一个立即调用的函数表达式(IIFE)。

以下是一个可以阐明其工作原理的示例:

(function(x) {  return x;  })(10);  // Returns 10

一旦定义了函数,括号内的值就被用作函数的参数。因此,在这种情况下,函数设置为返回参数,之后立即赋值为10

在你的例子中,添加了一些空格:

return (function(y) {
           return y-- ** --y + 1;
       })(++a)
+ a

发生的事情是一样的。然后定义一个函数,之后立即接收参数++a。它会将y的所有实例替换为++a中包含的值。然后,当返回时,它会经过+ a,因此会将a添加到结果中。