js高階篇 閉包和立即執行函式

2021-10-09 21:31:40 字數 1227 閱讀 7133

先上一段**

function

formatter

(value, row, index)

, type:

"post"

, datatype:

"json"

, success:

function

success

(data)

else

if(data.status ==

'0')

}else

if(data.code ==

'0')},

error:

function

error

(jqxhr)})

;})(plan_id);}

else

if(status ==

'2'|| status ==

'3'|| status ==

'5')

str += btn3;

return str;

}

**的目的是: status==0或1時,傳送ajax請求getstatus,返回的另乙個status=0,就顯示"計算中…"按鈕; 是1,就顯示"計算"按鈕,意思是計算完成了.

如果不用閉包的話,只能通過全域性變數,然後儲存的辦法來辦了.這樣不是很好,因為汙染了全域性變數,而且看起來low!

我就找了資料,用閉包(formatter裡再套個內部函式function (v_plan_id),然後正常的是先定義內部函式,然後呼叫. 好!理解了這裡你不錯,這是第二個層次了! 你已經超越一大波人了.

接著是立即執行函式: 你不要以為是什麼es6的新功能,其實不是的,早在es5時就有了. 只不過你沒聽過罷了.

它的作用就是,讓這被()括起來的一段** 立即被執行,可以傳參. 而且啊,不用先定義,再呼叫了. 簡化咱們的書寫!nb不nb?!英霸不英霸?!

最後乙個關鍵點,普通的函式裡,這麼寫就夠了. 但是我這個**裡,邏輯都在ajax的success裡處理的,要正常讓btn3獲得新值,必須要用同步! 執行的才是正常**邏輯,如若不然,你試下,會發現btn3每次返回的都是undefined.

ajax非同步只是為了增強使用者的體驗感!!

總結: ajax要同步; 為了避免汙染全域性變數,利用閉包; 為了簡化函式的書寫,利用 立即執行函式.

理解閉包和立即執行函式

理解閉包和立即執行函式 1.閉包 function count i 5 count 1 var c1 count 變數i在函式呼叫完一次就被銷毀 c1 1 c1 1 如何實現乙個簡單的計時器,採用閉包 function count2 var c2 count2 c2 1 c2 2 c2 3 var ...

js 作用域,作用域鏈,立即執行函式,閉包

作用域 1全域性作用域 全域性作用域就是最外層函式定義的變數,對任何內部函式來說,都是可以訪問的。2.區域性作用域 區域性作用域就是只在固定 片段內可以訪問到,在函式外部是無法訪問的。函式外是不可以訪問到函式內的,所以報錯。作用域鏈 scope 中所儲存的執行期上下文物件的集合,這個集合成鏈式鏈結,...

js立即執行函式

void function func function param function param param function function function 這些可能在平時寫一些普通指令碼的時候不會用,也不常見,但是當你看別人的原始碼的時候就會發現,特別是一些js的外掛程式時候,是很常見的,初...