2017-08-29 28 views
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); } }();,我会喜欢它,我曾见过两种,一种是外层,另一种是没有外层,看起来在相同的环境下。

+1

是的,您正在调用外部函数,所以当您执行'f9'时,如果调用'f9',但您正在调用内部函数,则获得内部函数 – MinusFour

+0

您正在返回一个被调用的函数,然后不会返回任何内容,这意味着它会按预期返回“undefined”。第一个示例返回对函数的引用。 – adeneo

+1

这听起来像你们说'f9'对象是'不断调用'的,因为在附加的'()'中是定义本身的一部分,并不等同于'f10'的例子。任何人为澄清做出更正式的回答? – gordlonious

回答

2

你的函数返回的内部函数,以拨打报警电话的内部函数,现在是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();

相关问题