我是Javascript的新手并且了解了闭包和嵌套范围。
提示要求: 编写一个具有三个嵌套函数的函数,每个函数将一个数字作为参数。最里面的函数应该返回所有三个数字的总和。
这就是我的想法:
var outMost = function (num1) {
var x = num1;
var innerMost = function (num2) {
var y = num2;
var innerInnerMost = function (num3) {
console.log(x + y + num3);
}
return innerInnerMost;
}
return innerMost;
}
var firstNum = outMost(1);
firstNum(2);
firstNum((3));
请帮助我理解我做错了什么 - 我已经去过很多网站了解关闭和范围,但似乎没有什么能解释清楚。谢谢你的帮助。
答案 0 :(得分:1)
当您调用firstNum(2)
时,您没有捕获返回值(这是一个函数)。如果我在Node.js REPL中运行你的代码,它的外观如下:
> var firstNum = outMost(1);
undefined
> firstNum(2);
[Function]
> firstNum((3));
[Function]
最后试试这个:
var firstNum = outMost(1);
var secondNum = firstNum(2);
secondNum(3);
以下是Node.js REPL中的内容:
> var firstNum = outMost(1);
undefined
> var secondNum = firstNum(2);
undefined
> secondNum(3);
6
undefined
请注意,作业评估为undefined
。另外,由于innerInnerMost没有return
任何东西,最后会有一个隐含的return undefined
。
答案 1 :(得分:0)
function firstFunc(x){
return function secondFunc(y){
return function thirdFunc(z){
console.log(x+y+z);
}
}
}
<强>调用强>
var ff = firstFunc(1);
var sf = ff(2);
sf(3);
答案 2 :(得分:0)
在此示例中非常容易看
如果你有这种类型 在 ES6
let f = () => {
return () => {
console.log('First function called');
return () => {
console.log('Second function called');
}
}
}
你有两种方法来调用每个函数,首先,我想调用 First 函数
以这种方式f()()
,然后我想调用第二函数f()()()。
首先,您将在控制台中看到
第一个叫做
的函数
然后
第二个函数叫
以及另一种使用此技术的方法
let f1 = f();
let f2 = f1();
你会看到
第一个叫做
的函数
如果你想进行第二次函数调用
let f1 = f();
let f2 = f1();
let f3 = f2();
然后你会看到
第二个函数叫
如果您要将此代码更改为 ES5
var f = function() {
return function() {
console.log('First function');
return function(){
console.log('Second function');
}
}
}
两种通话方式
var f1 = f();
var f2 = f1();
var f3 = f2();
f()()();