Javascript 这是什么?(函数(){})()

Javascript 这是什么?(函数(){})(),javascript,function,Javascript,Function,可能的重复项: 它是一个立即调用的匿名函数())将不起作用,因为在使用()调用函数之前,需要对函数进行()处理 分类相当于: function a(){} a(); 第一个函数只是将函数包装在()中,这样它就可以用()立即调用函数 嗨,你好 function(){ alert('Hi'); } 因为你的函数从未执行过,所以什么都不做。这是一个匿名函数,它会立即被调用()调用函数,并且会(和)包装整个过程 ( // arbitrary wrapping (function() {

可能的重复项:


它是一个立即调用的匿名函数<代码>())将不起作用,因为在使用()调用函数之前,需要对函数进行
()
处理

分类相当于:

function a(){}
a();

第一个函数只是将函数包装在
中,这样它就可以用
()
立即调用函数

嗨,你好

function(){
    alert('Hi');
}

因为你的函数从未执行过,所以什么都不做。

这是一个匿名函数,它会立即被调用()调用函数,并且会(和)包装整个过程

( // arbitrary wrapping
(function() { // begin anon function

}) // end anon function
() // call the anon function
) // end arbitrary wrapping

这是声明一个匿名函数,然后立即执行它。这在创建范围变量时很常见。

它们是相同的

在函数定义或函数调用周围必须有一个括号,以使其成为有效的Javascript语法,但使用哪个并不重要

要演示它的功能,请使用命名函数:

function something() {}

// parenthesis around the function reference:
(something)();

// parenthesis around the function call:
(something());

这只是一个匿名函数。
()
参数立即调用该函数,而不是等待它在别处被调用。

这声明了一个匿名函数并立即调用它

这样做的好处是,函数内部使用的变量不会添加到当前作用域中,您也不会将函数名添加到当前作用域中

需要注意的是,围绕函数声明的括号不是任意的。如果删除这些,您将得到一个错误

最后,您可以使用额外的括号将参数传递给匿名函数,如中所示

(function (arg) {
   //do something with arg
})(1);

请参见JavaScript中的,函数定义是一个文本,这意味着它是一个带有
函数
对象值的表达式


如果将
()
放在函数的后面,那么在定义函数之后就可以有效地调用它。

我认为这没有任何作用。我可能是错的。这里的问题是相同的,经常被问到的问题。你的两个例子之间只有一个“语法”上的差异,请检查。它不是自调用,它是一个匿名函数,在创建后立即调用。如果你想让自己调用匿名函数,请阅读这篇博文:本周1600分?伟大的保罗:)@yahelc,你知道些什么。我刚测试过,你是对的。我想我以前也试过这种方法,但它不起作用,我一直认为是这样的,因为。。。那时候我肯定犯了别的错误,哈哈。编辑我的帖子:)@yahelc实际上我想我尝试的是没有任何括号,比如
function(){//code}()
@PaulPro删除了否决票。谢谢你的修复:)-1。除非我忽略了什么,否则第二个例子是完全有效的语法。为什么你认为他的第二个例子是无效的?仅供参考,从ie6到最新的chrome和firefox,所有浏览器都接受第二个版本,而且我已经看到它比第一个版本推荐了好几次。您只需要确保整个函数调用都在括号内;例如(function(){console.log('test');}())。From:“当一个函数要被立即调用时,整个调用表达式应该被包装在参数中,这样就可以清楚地看到,生成的值是函数的结果,而不是函数本身。”+1。这是唯一能回答OP所问问题的答案。
( // arbitrary wrapping
(function() { // begin anon function

}) // end anon function
() // call the anon function
) // end arbitrary wrapping
function something() {}

// parenthesis around the function reference:
(something)();

// parenthesis around the function call:
(something());
(function (arg) {
   //do something with arg
})(1);