(function(){})有什么作用?

时间:2012-10-29 18:40:19

标签: javascript function

以下()有什么作用?它似乎打印出里面的内容()。

(function() {
    console.log("test");
});

这就是ExtJS 4定义版本的方式:

(function() {

// Current core version
var version = '4.1.1', Version;
    Ext.Version = Version = Ext.extend(Object, {
    ...
});

4 个答案:

答案 0 :(得分:9)

我将不得不假设您错误地复制了代码。

这什么都不做
(function() {
console.log("test");
});
这将“test”写入控制台
(function() {
console.log("test");
}());

你似乎问的真正问题是,为什么

function () {...}定义了一个新的匿名函数。

function () {...}()调用匿名函数

(function () {...}()); parens用于强制执行该函数。如果没有某种类型的运算符,JS解释器将抛出一个SyntaxError。

有人在某些代码中加入immediately invoked function expression内联的原因是引入一个新的变量范围。在JavaScript中,块没有作用域,这可能会导致一些非常混乱的错误,因为新开发人员并不知道这个问题。

此外,使用函数作为包装器可以防止varfunction声明污染全局命名空间,而是隐藏在IIFE中。这是 A Good Thing™


鉴于附加信息J Any发布:

“这就是ExtJS 4定义版本”的方式
(function() {

// Current core version
var version = '4.1.1', Version;
    Ext.Version = Version = Ext.extend(Object, {
    ...
});

发布的代码不完整。大括号和parens没有正确匹配。

结束});属于Ext.extend(Object, { (function () {

答案 1 :(得分:7)

它什么都不做,因为匿名函数或其中的任何其他符号都不会被暴露,所以代码永远不会被调用。

如果你在末尾添加(),那就是一个自调用匿名函数,它通常用于创建一些其他代码无法访问的局部变量

(function() {
console.log("test");
})();

Ext-JS确实有意义的代码是因为他们通过调用

在匿名函数内部创建了一些代码。
Ext.Version = Version = Ext.extend(Object, ...

你的样本Ext-JS代码中有一个拼写错误。他们的代码实际上是以下

(function() {
    // Current core version
    var version = '4.1.1', Version;
    // Exposes our local Version into the global Ext.Version object
    Ext.Version = Version = Ext.extend(Object, {
    //... More code
    });   
}()) // See the brackets after the function? That runs the code above immediately

答案 2 :(得分:2)

实际上,仅此一项就什么都不做。它定义了一个匿名函数,以后永远无法引用或调用它。

但是,这个:

(function() {
console.log("test");
})();

将定义一个匿名函数并将其命名为,将“test”打印到控制台。第一位与问题中的位相同,最后一位()调用该函数。

答案 3 :(得分:1)

它什么都不做。它是括号中包含的函数表达式。没有它们,您将收到错误。