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

http://www.2cto.com/kf/201406/308973.html

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

例如:

 (function()
	 {
	     alert("测试1");		
	 })();  
    (function()
	 {
	     alert("测试3");		
	 }());	
其实这段代码,就是定义了一个匿名函数,并且进行了调用,

相当于如下几行代码:

(function ListCommon2()
	 {
	     alert("测试1");		
	 })();  
    (function ListCommon3()
	 {
	     alert("测试3");		
	 }());

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

function ListCommon2()
	 {
	     alert("测试1");		
	 }; 
    ListCommon2();	 
    function ListCommon3()
	 {
	     alert("测试3");		
	 };	 
   ListCommon3();	 

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

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

  (function(text)
	 {
	     alert(text);		
	 })("测试1");  
    (function(text)
	 {
	     alert(text);		
	 }("测试3"));



http://www.cnblogs.com/yuzhongwusan/archive/2011/11/09/2243072.html
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代码   收藏代码
  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代码  收藏代码     例子: 
Js代码  收藏代码   
Java代码   收藏代码
  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 处理;如果当前 () 中存在同名的局部变量,则按常规处理。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值