javascript中(function{})()寫法解析
javascript 中(function{})()這種寫法什麼意思?
最近在整理javascript 學習,發現這個問題了 ,在網上發現這麼個解釋 最清楚 最明白 ;
(function(){})()
相當於先定義 function xx(){},後呼叫 xx();
()是最高優先順序的,所以先執行function(){},
這個定義了一個匿名函式,等於xx=function(){}
接著就是呼叫xx()了;
給個例子
JScript codefunctionf1(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() {
=function() {------宣告一個叫的名稱空間(通過全域性變數的增加屬性的方式把閉包裡的物件傳到全域性變數中,實現程式碼封裝的效果)
isUndefined: function(o) {
return typeof o === 'undefined';
isString: function(o) {
return typeof o === 'string';
---呼叫方法
alert(ring('test me'));
這時候就有人不明瞭,樓上為什麼要加(function() { 和)(); 最外面的這兩行,有什麼用啊?
JScript codeYY=YY||{}; //---宣告一個叫YY的'名稱空間(定義一個全域性的變數)
function() { =function() {
//------宣告一個叫的名稱空間(通過全域性變數的增加屬性的方式把閉包裡的物件傳到全域性變數中,實現程式碼封裝的效果) isUndefined:function(o) {returntypeofo==='undefined'; },
isString:function(o) {returntypeofo==='string'; } }; }
//---呼叫方法
alert(ring('test me'));
疑問在這: 註釋掉這兩行有什麼不一樣的呢?不就是申明嗎,為什麼要用()()執行一下啊?
答:
(function(){})()意思是立即執行前一個括號裡的function,相當於是一個匿名函式;由於裡面的程式碼的執行,定義了這個物件,所以可以執行alert(ring('test me'));呼叫isString方法。
但是,如果按照你寫的
functionaa(){..};//只是定義了一個叫aa的函式,但是並沒有執行
alert(ring('test me'));//執行的時候會報找不到isString的方法。
這麼寫有什麼好處??
(function{})()的寫法有個好處,就是能很好的利用javascript的變數的可見範圍為執行指令碼時節省空間。例如以下寫法1和寫法2達到的目的是一樣的,但是寫法1的由於a變數的可見範圍只是在匿名函式體內,所以a在執行完這個匿名函式後就釋放空間了。但是寫法2會一直存在該頁面中。
寫法1:
JScript code(function(){vara=2; alert(a); })();
寫法2:
JScript codevara=2; alert(a);