3
此功能:为什么当()被添加到定义之后,这个简单的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'时,如果调用'f9',但您正在调用内部函数,则获得内部函数 – MinusFour
您正在返回一个被调用的函数,然后不会返回任何内容,这意味着它会按预期返回“undefined”。第一个示例返回对函数的引用。 – adeneo
这听起来像你们说'f9'对象是'不断调用'的,因为在附加的'()'中是定义本身的一部分,并不等同于'f10'的例子。任何人为澄清做出更正式的回答? – gordlonious