我正在学习javascript而且我找到了这个练习:
function abc(a){
return(function(y){
return y--**--y+1;
})(++a)+a;
}
document.write(abc(2));
那个输出是7,我不明白为什么,我搜索了有关嵌套函数的信息,但我没找到任何东西......
如何定义“y”?
答案 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
添加到结果中。