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

J A*_*Any -2 javascript function

以下()做了什么?它似乎打印出里面的内容().

(function() {
    console.log("test");
});
Run Code Online (Sandbox Code Playgroud)

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

(function() {

// Current core version
var version = '4.1.1', Version;
    Ext.Version = Version = Ext.extend(Object, {
    ...
});
Run Code Online (Sandbox Code Playgroud)

zzz*_*Bov 9

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

这什么都不做
(function() {
console.log("test");
});
Run Code Online (Sandbox Code Playgroud) 这会将"test"写入控制台
(function() {
console.log("test");
}());
Run Code Online (Sandbox Code Playgroud)

看起来你问的真正问题是,为什么.

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

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

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

有人在某些代码中将内联调用函数表达式内联的原因是引入一个新的变量作用域.在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, {
    ...
});
Run Code Online (Sandbox Code Playgroud)

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

最终});属于Ext.extend(Object, { 没有 (function () {.


Jua*_*des 7

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

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

(function() {
console.log("test");
})();
Run Code Online (Sandbox Code Playgroud)

Ext-JS确实有意义的代码是因为他们通过调用在匿名函数内部创建了一些代码

Ext.Version = Version = Ext.extend(Object, ...
Run Code Online (Sandbox Code Playgroud)

你的样本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
Run Code Online (Sandbox Code Playgroud)