javascript匿名函数语法

Jef*_*rey 3 javascript anonymous-function

以下两个区块有什么区别?

// block 1
{
    console.log("anonymous block");
}

// block 2
(function anon() {
    console.log("anonymous block 2");
})();
Run Code Online (Sandbox Code Playgroud)

我在Netbeans中运行它(使用node.js插件),它们似乎都工作...

Pla*_*ure 6

不同之处在于您可以使用后一种形式隐藏全局变量而不会破坏它们.

例如,假设您正在使用jQuery库,默认情况下将其主命名空间别名为$.如果您想在$不改变$通常使用方式的情况下使用其他目的,您可以执行以下操作:

(function($) {
    // Use $ without clashing with the jQuery object.
})(someObject);
Run Code Online (Sandbox Code Playgroud)

事实上,它对另一个目的也很有用.由于undefined它不是JavaScript中的保留字,因此可以赋予它一个值并失去其目的.因此,您可以简单地不将值传递给undefined参数,并且您知道它将在不与全局值冲突的情况下正常运行.

undefined = "some not-undefined value";    // you'd have to be an idiot to do this but I've seen it done
(function(a, b, undefined) {
    console.log(typeof(undefined) === "undefined");   // true
})(someA, someB);
Run Code Online (Sandbox Code Playgroud)