javascript - 为什么这个简单的Js函数在定义后加了()却没有返回值/对象?

标签 javascript function

这个函数:

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); } }(); 我都见过,有外括号的和没有外括号的,似乎在同一个上下文中。

最佳答案

你的函数返回内部函数,为了调用 alert 调用现在是 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();

关于javascript - 为什么这个简单的Js函数在定义后加了()却没有返回值/对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45943938/

相关文章:

c# - 从另一个方法调用 Main

python - 素数递归 - 它是如何工作的? (Python)

C++函数返回两个char数组的相同索引元素

javascript - 如何在angularjs中制作动态侧边栏

javascript - 将单元格值设置为 mxGraph 中的超链接

javascript - JavaScript 中外部 JSON 对象的最大推荐大小

javascript - 将逗号分隔的字符串转换为逗号分隔的数字

javascript - 如何用 Jquery/JS 交换 2 @Html.DropDownListFor

swift - 使用我在 Swift 的另一个函数中调用的函数中的常量

php - 为什么会有函数create_function()?在 PHP 中