當前位置:才華齋>設計>網頁設計>

 javascript中(function{})()寫法解析

網頁設計 閲讀(2.08W)

javascript中(function{})()寫法解析

 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);