js中,(function(){})()的用法解析
?
?
(function($){...})(jQuery)? 含義
經常用,今天總結一下,下文摘自某網友的總結:
(function($){...})(jQuery)實際上是匿名函數,不懂得朋友可以繼續往下看。
這里實際上是匿名函數 function(arg){...} 這就定義了一個匿名函數,參數為arg 而調用函數時,是在函數后面寫上括號和實參的,由于操作符的優先級,函數本身也需要用括號,即: (function(arg){...})(param) 這就相當于定義了一個參數為arg的匿名函數,并且將param作為參數來調用這個匿名函數 而(function($){...})(jQuery)則是一樣的,之所以只在形參使用$,是為了不與其他庫沖突,所以實參用jQuery var fn = function($){....}; fn(jQuery);
(funtion(){})();立即執行函數;相當于先申明一個函數,聲明完后直接調用;如果參數如:
(funtion(str){alert(str)})("output"));相當于:funtion OutPutFun(str){alert(str);};OutPutFun("output");
?
?
?
?
?
最近在整理
javascript
學習,發現這個問題了
?
,在網上發現這么個解釋
?
最清
楚
?
最明白
?
;
?
(function(){})()
相當于先定義
?function xx(){}
,后調用
?xx();
()
是最高優先級的,所以先執行
function(){}
,
?
這個定義了一個匿名函數,等于
xx=function(){}
接著就是調用
xx()
了
;
給個例子
?
JScript code
functionf1(a)
?
??
{
?
?alert(a);
?
??
?
?
?
?
?
}
?
?functionf2(a)
?
{
?
?
?returnfunction(){
alert(a);
}
?
??
?
?
?
?
}
?
這里的
var x=f2
就等于把函數傳遞給了
f2,
然后要執行這個函數
,
就必須加
()
也就是
x();
也就是
f2()??
還是
(function f2(a){
?
? return function(){
?
? alert(a);?
?
?})();
?
另外還有一個問題
?
就是命名空間的問題
?
YY = YY||{};---
聲明一個叫
YY
的命名空間(定義一個全局的變量)
?
(function() {
?
YY.Lang=function()
{------
聲明一個叫
YY.Lang
的命名空間
(通過全局變量的
增加屬性的方式把閉包里的對象傳到全局變量中,實現代碼封裝的效果)
?
isUndefined: function(o) {
?
? return typeof o === 'undefined';
?
? },
?
isString: function(o) {
?
? return typeof o === 'string';
?
? }
?
};
?
?
})();
?
?
---
調用方法
?
alert(YY.Lang.isString('test me'));
?
?
這時候就有人不明了,
樓上為什么要加
(function()
{
和
)();
最外面的這兩行,
有什么用啊?
?
?
?
?
J
Script code
?
YY=YY||{};
//---
聲明一個叫
YY
的命名空間(定義一個全局的變量)
?
//(
?
function()
{
YY.Lang=function()
{
?
//------
聲明一個叫
YY.Lang
的命名空間
(通過全局變量的增加屬性的方式把閉包里的對象傳
到全局變量中,實現代碼封裝的效果)
?
isUndefined:function(o)
{returntypeofo==='undefi
ned';
},
?
?isString:function(o)
{returntypeofo==='string';
}
};
}
?
?
//)();
?
//---
調用方法
?
?alert(YY.Lang.isString('test
me'));??
?
疑問在這:??????
?
?
?
注釋掉這兩行有什么不一樣的呢?不就是申明嗎,為什么要用
()()執行一下啊?
?
答:
?
(
function(){})()
意思是立即執行前一個括號里的
function
,相當于是一個匿名函數
;
由于里面
的代碼的執行,
定義了
YY.Lang
這個對象,
所以可以執行
alert(YY.Lang.isString('test
me'));
調用
isString
方法。
?
但是,如果按照你寫的
functionaa(){..};//
只是定義了一個叫
aa的函數,但是并沒有執行
alert(YY.Lang.isString('test
me'));//
執行的時候會報找不到
isString
的方法。
這么寫有什么好處??????????????
(function{})()
的寫法有個好處,就是能很好的利用
javascript
的變量的可見范圍為執行腳本
時節省空間。例如以下寫法
1和寫法2達到的目的是一樣的,但是寫法1的由于a變量的
可見范圍只是在匿名函數體內,
所以a
在執行完這個匿名函數后就釋放空間了。
但是寫法2
會一直存在該頁面中。
?
寫法
1
:
?
JScript
code
?
(function(){vara=2;
alert(a);
})();
?
?
寫法
2
:
?
JScript
code
?
vara=2;
alert(a);
?
總結
以上是生活随笔為你收集整理的js中,(function(){})()的用法解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用WireShark分析由Ping产生
- 下一篇: 薏米红豆粥功效及做法介绍