为什么很多JavaScript库开始“(功能(){”?

为什么很多JavaScript库是这样的:

(function () { /* code goes here */ })();

这似乎是定义一个匿名函数被立即调用。 为什么要通过这种努力?

--------------解决方案-------------

这是标准的做法命名空间中的JavaScript。 如果你只是声明

var my_cool_variable = 5;

这将是全球,并可能与其他库,使用相同的变量冲突。

但是,如果你这样做

(function() {
var my_cool_variable = 5;
})();

它现在是匿名功能局部变量并且不是函数的范围的外部可见。 您还可以通过不声明暴露访问API var变量的前面,这样,它是全球性的,但现在你有一个选择。

如果部队声明范围。 通过将它的功能你要确保你创建和调用的变量没有被重新申报,或者你不小心调用这些别处声明的变量。

所以.....

var variable = 5; // this is accessible to everything in the page where:

function ()
{
var variable = 7 // this is only available to code inside the function.
}

下面是一个链接,道格拉斯Crockford的网站的Javascript谈论范围:

http://javascript.crockford.com/code.html

跟进下面的评论:

JavaScript的范围是一个小“破”:

function ()
{
var x = 3; // accessible in the entire function.
//for scope reasons, it's better to put var y = 8 here.....
if(x != 4)
{
var y = 8; //still accessible in the entire function.
//In other languages this wouldn't be accessible outside
//of the if statement, but in JavaScript it is.

}

}

在一个简单的层面它使全局命名空间干净(ER)。

即:它有效地增加了一层环绕函数和变量包装库内从而确保不会有任何的命名空间冲突与其他功能,可能是从其他图书馆等使用

JavaScript没有块作用域,仅是函数的范围。 通过创建并立即调用一个匿名函数,我们可以保证它的局部变量不会遍布全局命名空间步骤。 它基本上是一个方式来限制与可能是在玩其他库冲突。

var $={} // a name space is defined

(function($) {
$.a_variable="some vale"
var b_variable = "some more value";
})($);

$.a_variable // acess it like this.

现在匿名函数中的任何东西都有范围等于该功能只有我们也可以创建一个可以作为属性来我们的名字空间物体。

分类:JavaScript的 时间:2015-03-15 人气:0
本文关键词: JavaScript的
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.415 (s). 10 q(s)