为什么这个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(){})