为什么这个JavaScript函数本身执行

我无法理解,是什么使这个function自己执行。 有人可以解释吗? 谢谢

var iCallMySelf = function(){ console.log("Hi there :D"); } (function(){}) 

这是一个function

 function(){ console.log("Hi there :D"); } 

如果你把这个函数赋值给一个variables,那么你可以执行它 – 这是最正常的方法:

 foo = function(){ console.log("Hi there :D"); } foo() 

但是,您可以在末尾使用这些括号来在声明它时直接执行该函数。 你必须把它包括在括号内,以使其成为这个工作的声明:

 (function(){ console.log("Hi there :D"); })() 

赋值也是一个声明,所以这也可以执行这个函数:

 var iCallMySelf = function(){ console.log("Hi there :D"); }() 

最后,当你执行它时,你可以在最后的括号中传入参数:

 var iCallMySelf = function(){ console.log("Hi there :D"); }(1, 2, 3) 

或者,就像在你的例子中,你正在传递另一个函数作为参数:

 var iCallMySelf = function(){ console.log("Hi there :D"); } ( // This is a function being passed as an argument to the function above function(){} ) 

你可以用你所传递的arg做这样的事情:

 var iCallMySelf = function(foo){ console.log("Hi there :D"); // foo is the function you pass in below console.log(foo) } ( // This is a function being passed as an argument to the function above function(){} ) 

希望有所帮助!

如果你不想自动调用它,你必须把它; 喜欢

 var iCallMySelf = function(){ console.log("Hi there :D"); }; (function(){}) 

由于下面的function包装,它会自动调用

每当你把一个函数放在函数之后,它就会被调用,所以如果你使用分号,下一个函数(函数(){})不会被iCallMyself

但如果你这样做

 var myFun = function() { console.log('Hii'); }; var x = myFun(); 

它将会被调用,Hi将会被打印,你的代码也一样。 希望你能理解

同样也会被调用

 var myFun = function() { console.log('Hii'); }; var x = myFun(function(){}); 

在你的问题你用相同的,所以当我写function,而定义西能做到这一点

 var x = function(){console.log('Hii')}(function(){}); 

这就是你的问题是如何做出来的…在你的问题中iCallMyself不是打印'你好:D'的函数,但是它作为一个variables工作,而且它不保存函数的返回值,所以为iCallMyself你的函数应该被调用,否则它不会得到任何值,

iCallMyself将保持未定义,即使它不是一个function,你可以试试这个

 var iCallMySelf = function(){ console.log("Hi there :D"); } (function(){}) console.log(iCallMyself); 

只是它的JavaScript的幻觉,我们认为iCallMyself是一个function,但在这里没有

也在你的问题,如果你打电话iCallMyself(); 你会得到错误,因为它不是一个函数

喜欢

尝试这个

 var iCallMySelf = function(){ console.log("Hi there :D"); } (function(){}) iCallMyself(); 

它会给错误,undefined不是一个函数,因为它不是一个函数,它似乎只是但不是真的。

那么分号的逻辑是什么?

当你把分号

 var iCallMySelf = function(){ console.log("Hi there :D"); }; (function(){}) iCallMyself(); 

现在行(function(){})与iCallMyself没有关系,它是一个包装函数,现在没有其他的可以调用iCallMyself()函数

 var x = function(){}(); 

所以现在function(){}()是可执行的,只要你把它返回给一个variables

 var x = function(){}; 

和function(){}不能由var执行,var将保存该函数

 var x = function(){};() 

和function(){};()now()是不必要的

你正在传递一个空白参数。 这就像调用iCallMySelf(parameter) 。 想象一下,在你声明一个函数之后,你添加了一些东西,就好像你正在发送一组你想要启动它的参数。

如果你稍后调用iCallMySelf()它会再次执行。 如果你iCallMySelf(blank)它仍然会这样做。 在JavaScript中,函数不需要任何参数,任何已定义的参数仍然是可选的,但是如果为空,则应该给定值。

这被parsing为

 var iCallMySelf = function(){console.log("Hi there :D");} ( function(){} ); // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ // a function expression and another one // ^^^ ^^ // a call of the first function, passing the second 

始终使用分号!

 var iDontCallMySelf = function(){ console.log("Hi there :D"); }; (function(){}); 

或者至less使用函数声明:

 function iDontCallMySelf(){ console.log("Hi there :D"); } (function(){}); 

如果你想在javascript中创build一个自我执行的函数,它看起来像这样:

 (function(param1, param2, ..) { // some code .. })(param1, param2, ..); 

你的代码包含一个自执行的函数,因为它后跟()

 var iCallMySelf = function() { console.log("Hi there :D"); }(function(){}) 

function(){}function(){}是一个匿名函数,它作为parameter passing给iCallMySelf函数。

如果你不想调用这个函数添加一个; 之后}

 var iCallMySelf = function() { console.log("Hi there :D"); }; (function(){})