我无法理解,是什么让这个功能自行执行。有人可以解释一下吗?感谢
var iCallMySelf = function(){
console.log("Hi there :D");
}
(function(){})
答案 0 :(得分:4)
这是一个功能
function(){
console.log("Hi there :D");
}
如果您将此函数分配给变量,则可以执行它 - 这是最正常的方法:
foo = function(){
console.log("Hi there :D");
}
foo()
但是,您可以在结尾处使用这些括号直接执行该函数。你必须将它包装在括号中,以使其成为一个声明:
(function(){
console.log("Hi there :D");
})()
Assignment也是一个声明,所以这也可以执行该函数:
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(){}
)
希望有所帮助!
答案 1 :(得分:1)
如果您不想自动拨打电话 你必须把; 像
var iCallMySelf = function(){
console.log("Hi there :D");
};
(function(){})
由于包含下面的功能而自动调用
每当你在一个函数之后调用put(),所以如果你使用分号,那么iCallMyself不会使用next(function(){})
但如果你喜欢这个
var myFun = function()
{
console.log('Hii');
};
var x = myFun();
它将被调用,你将打印嗨,你的代码也一样。希望你理解
同样也会被称为
var myFun = function()
{
console.log('Hii');
};
var x = myFun(function(){});
并且在你的问题中你使用了相同的,所以当我在定义x时写函数我可以做到这一点
var x = function(){console.log('Hii')}(function(){});
这就是你提出问题的方式......在你的问题中,iCallMyself不是打印的功能'你好:D'但它作为变量工作,也没有保持函数的返回值,所以为iCallMyself提供值,你的函数应该调用,否则它不会得到任何值,
iCallMyself将保持未定义,即使它不是函数你可以试试这个
var iCallMySelf = function(){
console.log("Hi there :D");
}
(function(){})
console.log(iCallMyself);
只是它的javascript幻觉,我们认为iCallMyself是一个函数,但在这里它不是
如果你打电话给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(){}()是可执行的var x = function(){};
和function(){}不能由var执行,var将保存函数
var x = function(){};()
和function(){};()now()不是必需的
答案 2 :(得分:0)
您正在传递空白参数。这就像打电话给iCallMySelf(parameter)
。想象一下,在声明一个函数并向末尾添加一些东西之后,就好像你要向它发送一组你想要启动它的参数。
如果您稍后再致电iCallMySelf()
,它会再次执行此操作。如果你iCallMySelf(blank)
它仍然会这样做。在javascript中,函数不需要参数,任何定义的参数仍然是可选的,但如果为空则应该给出一个值。
答案 3 :(得分:0)
将其解析为
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(){});
或者至少使用函数声明:
function iDontCallMySelf(){
console.log("Hi there :D");
}
(function(){});
答案 4 :(得分:0)
如果你想在javascript中创建一个自执行函数,它将如下所示:
(function(param1, param2, ..) {
// some code ..
})(param1, param2, ..);
您的代码包含自执行功能,因为它后跟()
:
var iCallMySelf = function() {
console.log("Hi there :D");
}(function(){})
function(){}
(
中的)
是一个匿名函数,作为参数传递给iCallMySelf
函数。
如果您不想调用该功能,请在;
之后添加}
:
var iCallMySelf = function() {
console.log("Hi there :D");
};
(function(){})