我在freeCodeCamp on YouTube为初学者准备的Java课程接近尾声时,我真的很困惑,因为视频中的那个家伙在变量"half“中存储了一个函数,如下所示:
const stats = {
max: 56.78,
standard_deviation: 4.34,
median: 34.54,
mode: 23.87,
min: -0.75,
average: 35.85
};
const half = (function () {
return function half({ max, min }) {
return (max + min) / 2.0;
};
})();
console.log(stats);
console.log(half(stats));我的问题是,为什么我们要把它复杂化,然后在变量中存储函数,然后在其中返回另一个函数,而我们只需键入
function half({ max, min }) {
return (max + min) / 2.0;
};在这种特殊情况下,他的方法有好处吗?
发布于 2021-03-21 21:22:21
在上面的特定示例中,没有理由,但有时您可能希望在该函数的本地范围中捕获某种状态,并以这种方式创建函数,从而使您可以封装某些作用域。例如,这个函数:
const someFunction = (function() {
let someState = 0;
return function() {
return someState++;
}
})();
someFunction(); // returns 0
someFunction(); // returns 1
someFunction(); // returns 2发布于 2021-03-21 22:32:18
您需要了解js中函数的功能。
--为了回答你的问题,有很多好处,就像艺术,它给程序员-它给我们的灵活性,做事情的方式,我们希望他们是。
-当你写更多的代码时,你很快就可以使用它们了。现在别太担心,只要理解他们就行了。
函数是一流的对象,这意味着它们可以是:
存储在变量、对象或数组中的function.
其中两个发生在上述代码中-它是:
从函数存储在variable.
--这把我们带到了三种函数类型/类--
存储在没有名称的变量中的
匿名函数是一个没有名称的函数。
示例:
let show = function () {
console.log('Anonymous function');
};
show();或者上面代码中的半变量中的无名称封闭函数。
自动调用(启动)自调用表达式,而不调用.
如果表达式后面跟着(),函数表达式将自动执行。
e.g
(function () {
var x = "Hello!!"; // I will invoke myself
})();或者上面代码中的半变量中的无名称封闭函数是一个自调用函数。
上面的半变量是一个匿名的自调用表达式,这意味着它包含一个匿名自调用函数。
function.
闭包是一个访问父作用域的函数,即使父函数已经关闭/调用。
该函数半可被视为闭包。如果匿名自调用函数中有一个变量与半变量相匹配,则即使调用了半表达式,它也可以访问该变量。
高阶函数是一个函数,它接受另一个函数作为输入,或者返回一个函数,或者两者兼而有之。
匿名自调用函数可以称为匿名高阶函数,因为它返回另一个函数。
在这里阅读更多https://www.freecodecamp.org/news/discover-the-power-of-first-class-functions-fd0d7b599b69/
https://www.w3schools.com/js/js_function_closures.asp
https://www.freecodecamp.org/news/a-quick-intro-to-higher-order-functions-in-javascript-1a014f89c6b/
https://stackoverflow.com/questions/66737608
复制相似问题