我正在练习闭包,现在我的工作是:
编写一个函数
once
,该函数接受回调作为输入并返回一个函数。 第一次调用返回的函数时,应调用回调 并返回该输出。如果有额外的时间被调用,而不是调用 再次进行回调,它将仅从第一次返回输出值 被叫。
我的回叫是:
const addByX = function (num1) {
let number = num1;
function adding(num2) {
console.log(number + num2);
}
return adding;
}
//addByX(2)(8);
let addByTwo = addByX(2);
我的主要功能是:
const once = function (func) {
let isFirst = true;
let firstOutput;
function inside(numberToPass) {
if (isFirst) {
firstOutput = func(numberToPass);
isFirst = false;
return func(numberToPass);
} else {
return firstOutput;
}
}
return inside;
}
它可以工作,但是当我调用它时
const onceFunc = once(addByTwo);
console.log(onceFunc(4)); //should log 6
console.log(onceFunc(10)); //should log 6
它返回我的值,并且也未定义。
我真的不明白为什么会这样。 也许如果可行,我不应该问这类问题,但我真的很好奇。 调试器无法明确回答我的问题。 我怀疑它与console.log有关,看起来很明显。
答案 0 :(得分:1)
函数<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">
<h3>SELECT YOUR VEHICLE</h3>
<br>
<ul id="SelectJeep">
<a href="link1.html"
class="clickme">
<li id="t-1" class="active">
<h1>MANCHE</h1>
</li>
</a>
<a href="link2.html" class="clickme">
<li id="t-2">
<h1>ASCENDER</h1>
</li>
</a>
<a href="link3.html" class="clickme">
<li id="t-3">
<h1>CRUSADER</h1>
</li>
</a>
<a href="link4.html" class="clickme">
<li id="t-4">
<h2>COMING SOON</h2>
</li>
</a>
</ul>
</div>
返回另一个函数addByX
。但是adding
不会返回任何内容。它只是记录。返回值是不确定的。
我认为您希望它看起来像这样:
adding
所以它“起作用”的原因是因为回调是在控制台上打印的,而不是您在哪里调用的。