为什么这个简单的 Js 函数在定义后添加 () 时不返回值/对象?



此函数:

var f8 = function() { return function(param1 = "default") { alert(param1); } }

返回一个对象:ƒ (param1 = "default") { alert(param1); }

但是这个功能:

var f9 = function() { return function(param1 = "default") { alert(param1); } }();

不会,即使在函数调用f9();之后。为什么?

我的新手理解是,附加的括号只会在定义函数后立即调用外部函数。换句话说,等效于:

var f10 = function() { return function(param1 = "default") { alert(param1); } };
f10();

从而返回与以前相同的函数对象。附带说明一下,如果有人能解释什么时候应该使用var f11 = (function() { return function(param1 = "default") { alert(param1); } }());而不是我见过的var f11 = function() { return function(param1 = "default") { alert(param1); } }();,一个是有外层的,一个是没有的,似乎在同一个上下文中。

您的函数返回内部函数,以便调用警报调用现在为 f9 的内部函数

var f9 = function() { return function(param1 = "default") { alert(param1); } }();
console.log(f9);
f9();

这相当于

var f10 = function() { return function(param1 = "default") { alert(param1); } };
console.log(f10);
var f9 = f10();
console.log(f9);
f9();

最新更新