-2

下面的 () 是做什么的?似乎打印出 () 内的内容。

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

ExtJS 4 是这样定义版本的:

(function() {

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

4 回答 4

9

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

这无济于事
(function() {
console.log("test");
});
这会将“测试”写入控制台
(function() {
console.log("test");
}());

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

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

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

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

有人将立即调用的函数表达式内联在某些代码中的原因是引入了一个新的变量范围。在 JavaScript 中,块没有作用域,这对于不了解该问题的新开发人员来说可能会导致一些非常混乱的错误。

此外,使用函数作为包装器可以防止varfunction声明污染全局命名空间,而是在 IIFE 中私有地保存。这是一件好事™


鉴于发布的附加信息 J Any:

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

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

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

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

于 2012-10-29T18:44:40.620 回答
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
于 2012-10-29T18:41:32.833 回答
2

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

然而,这:

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

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

于 2012-10-29T18:42:50.950 回答
1

它什么也不做。它是一个用括号括起来的函数表达式。没有它们,你会得到一个错误。

于 2012-10-29T18:42:03.157 回答