js 两个小括号 ()() 的用法

在查看很多jQuery的过程中,经常遇到两个小括号的情况。

例如:

 

 
  1. (function()

  2. {

  3. alert("测试1");

  4. })();

  5. (function()

  6. {

  7. alert("测试3");

  8. }());

其实这段代码,就是定义了一个匿名函数,并且进行了调用,

 

相当于如下几行代码:

 

 
  1. (function ListCommon2()

  2. {

  3. alert("测试1");

  4. })();

  5. (function ListCommon3()

  6. {

  7. alert("测试3");

  8. }());


进一步改写为我们正常使用先定义函数,在调用为:

 

 

 
  1. function ListCommon2()

  2. {

  3. alert("测试1");

  4. };

  5. ListCommon2();

  6. function ListCommon3()

  7. {

  8. alert("测试3");

  9. };

  10. ListCommon3();


这就是为什么,我们使用的很多jQuery插件库,虽然我们没有调用,只是添加进来了,但在页面完成加载后,还是执行了很多操作,例如jquery eiasyui就很明显的修改了DOM,处理了很多自定义的属性标签。

 

如何给这类函数传递参数?和普通的函数一样,例如:

 

 
  1. (function(text)

  2. {

  3. alert(text);

  4. })("测试1");

  5. (function(text)

  6. {

  7. alert(text);

  8. }("测试3"));

 

 

 

http://www.cnblogs.com/yuzhongwusan/archive/2011/11/09/2243072.html

js 两个小括号 ()() 的用法

JavaScript 中,考查如下代码: 
Js代码  收藏代码 
 

Java代码  收藏代码

  1. (function()    
  2.  {    
  3.      alert("cftea");    
  4.  })();    




其实这段代码的意思就是执行这个匿名函数,弹出提示框,内容为“cftea”。 

可以把上述代码理解为: 
Js代码  收藏代码 

  

Java代码  收藏代码

  1. function foo()    
  2.    {    
  3.        alert(1);    
  4.    }    
  5.    foo();   

其实相同的功能还有另外两种写法,我们一并列出来如下: 
Js代码  收藏代码    

Java代码  收藏代码

function foo()    

  1.     {    
  2.         alert("cftea");    
  3.     }    
  4.     foo();    
  5.          
  6.     (function()    
  7.     {    
  8.         alert("cftea");    
  9.     })();    
  10.          
  11.     (function()    
  12.     {    
  13.         alert("cftea");    
  14.     }());    
  15.          
  16.     void function()    
  17.     {    
  18.         alert("cftea");    
  19.     }()    

用途 
说了这么多,这东西到底有什么用呢?它可以立即执行一段代码,并把结果赋给变量;打破我们常规的先写函数,再调用的流程,简化书写。 
Js代码  收藏代码    

Java代码  收藏代码

ajax.xmlhttp = (...)();     

例子: 
Js代码  收藏代码   

Java代码  收藏代码

function Foo() {    

  1.        var a = 123;    
  2.        this.a = 456;    
  3.        (function() {    
  4.            alert(a); // 123    
  5.            alert(this.a); // undefined    
  6.        })();    
  7.    }    
  8.    var f = new Foo();    

以上代码,先显示 123,再显示 undefined,说明 alert(this.a); 这句中 this 是指本 function 的,而不是其外部 function 的。如果要使用外部的成员,可使用参数的形式传入:
Js代码  收藏代码    

Java代码  收藏代码

  1. function Foo() {    
  2.         var a = 123;    
  3.         this.a = 456;    
  4.         (function(a) {    
  5.             alert(a); // 456    
  6.         })(this.a);    
  7.     }    
  8.     var f = new Foo();    

很好理解,再看看下面的: 
Js代码  收藏代码    

Java代码  收藏代码

  1. function Foo() {    
  2.         var a = 123;    
  3.         this.a = 456;    
  4.         (function() {    
  5.             alert(a); // 123    
  6.             alert(this.a); // undefined    
  7.             this.b = 789;    
  8.         })();    
  9.         (function() {    
  10.             alert(this.b); // 789    
  11.         })();    
  12.     }    
  13.     var f = new Foo();    
  14.     (function() {    
  15.         alert(this.b); // 789    
  16.     })();   

    同样是先显示 123,然后显示 undefined,然后显示 789,最后又是一个 789。这说明用两个小括号括起来的都是位于一个执行上下文中的,不论这些代码放在哪里。        
    再看看:    
   

Java代码  收藏代码

  1. function Foo() {    
  2.         (function() {    
  3.             this.b = 789;    
  4.         })();    
  5.         (function() {    
  6.             alert(this.b); // 789    
  7.             var b = 0;    
  8.             alert(b); // 0    
  9.         })();    
  10.     }    
  11.     var f = new Foo();    
  12.     (function() {    
  13.         alert(this.b); // 789    
  14.         alert(b); // 789    
  15.     })();    

    令人意外的是,最后一个 alert(b),结果仍然是 789。      
    更深入一步:           

Java代码  收藏代码

  1. function Foo() {    
  2.         (function() {    
  3.             this.b = 789;    
  4.         })();    
  5.         (function() {    
  6.             alert(this.b); // 789    
  7.             alert(b); // undefined    
  8.             var b = 0;    
  9.             alert(b); // 0    
  10.         })();    
  11.     }    
  12.     var f = new Foo();    
  13.     (function() {    
  14.         alert(this.b); // 789    
  15.         alert(b); // 789    
  16.     })();    

从上,我们可以看出,取值时、没有加 this 时:如果当前 () 中不存在同名的局部变量,则等同于加 this 处理;如果当前 () 中存在同名的局部变量,则按常规处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值