不带参数的匿名函数 return 本身带参数
Anonymous function without arguments return itself with arguments
我正在学习javascript,见过这样写的匿名函数,没有任何解释:
const sum = (function() {
return function sum(x,y,z){
return (x+y+z);
};
})();
console.log(sum(1,2,3)); //6
我看的方式是:匿名声明一个函数,赋值给const sum。使用参数调用 sum() 并 console.log() 结果。
这让我很困惑,因为我不明白为什么要这样写。一些问题是:
当最外层函数没有指定参数时,sum如何接受参数?
为什么我们不在最外层函数上指定参数??为什么它会自行返回,而 'sum' 何时被调用?
如果它太愚蠢或太明显,我们深表歉意。纠结了好久,终于决定在这里问一下。
首先这个函数不仅仅是匿名的。它是一个 iife(立即调用函数)并且返回 sum 函数。所以 const 变量 sum
实际上是 iife 函数返回的 sum 函数。
console.log(sum(1,2,3));
因此,上面一行中的 sum 指的是 iife 函数返回的函数 sum
而不是 iife 函数本身
更多了解 iife 检查 - https://developer.mozilla.org/en-US/docs/Glossary/IIFE
为了更好的理解,我们可以展开为:
const _sum2 = function() { // anonymous function
return function sum(x,y,z){
return (x+y+z);
};
}
const sum = _sum2(); // value of _sum2 returns
// it is the same as
const sum = function sum(x,y,z){
return (x+y+z);
}
console.log(sum(1,2,3));
自己测试一下:
const sum = (function() {
return function sum(x,y,z){
return (x+y+z);
};
})();
console.log('const sum = ' + sum.toString());
此类语法用于保护中间值和函数。在你的情况下没有这样的变量,但是:
const sum = (function() {
const n = 10;
function protected() {
return n;
}
return function sum(x,y,z){
return protected() * (x+y+z);
};
})();
console.log(sum(1,2,3)); // evaluates to 60
函数 protected
和变量 n
是密封的,不会暴露在您的全局环境中。
我正在学习javascript,见过这样写的匿名函数,没有任何解释:
const sum = (function() {
return function sum(x,y,z){
return (x+y+z);
};
})();
console.log(sum(1,2,3)); //6
我看的方式是:匿名声明一个函数,赋值给const sum。使用参数调用 sum() 并 console.log() 结果。
这让我很困惑,因为我不明白为什么要这样写。一些问题是:
当最外层函数没有指定参数时,sum如何接受参数? 为什么我们不在最外层函数上指定参数??为什么它会自行返回,而 'sum' 何时被调用?
如果它太愚蠢或太明显,我们深表歉意。纠结了好久,终于决定在这里问一下。
首先这个函数不仅仅是匿名的。它是一个 iife(立即调用函数)并且返回 sum 函数。所以 const 变量 sum
实际上是 iife 函数返回的 sum 函数。
console.log(sum(1,2,3));
因此,上面一行中的 sum 指的是 iife 函数返回的函数 sum
而不是 iife 函数本身
更多了解 iife 检查 - https://developer.mozilla.org/en-US/docs/Glossary/IIFE
为了更好的理解,我们可以展开为:
const _sum2 = function() { // anonymous function
return function sum(x,y,z){
return (x+y+z);
};
}
const sum = _sum2(); // value of _sum2 returns
// it is the same as
const sum = function sum(x,y,z){
return (x+y+z);
}
console.log(sum(1,2,3));
自己测试一下:
const sum = (function() {
return function sum(x,y,z){
return (x+y+z);
};
})();
console.log('const sum = ' + sum.toString());
此类语法用于保护中间值和函数。在你的情况下没有这样的变量,但是:
const sum = (function() {
const n = 10;
function protected() {
return n;
}
return function sum(x,y,z){
return protected() * (x+y+z);
};
})();
console.log(sum(1,2,3)); // evaluates to 60
函数 protected
和变量 n
是密封的,不会暴露在您的全局环境中。