編寫自呼叫匿名函式的結構一般如下:
;(function( window, undefined ) )(window);
傳入的引數window,和引數列表中的undefined怎麼解釋?
1、傳入的引數window
把全域性的window物件傳進去,把全域性的變數變成區域性變數,避免了函式裡面執行時候,不需要將作用域鏈退到頂層作用域,到外面去尋找window,可以提高效率。假如函式裡面用到很對window的物件,這樣函式要不停的去外面尋找。
還有一點,在壓縮**的時候,window作為引數可以壓縮成一些識別符號。
2、引數列表中的undefined
在匿名函式的作用域內,確保undefined是真的未定義。
就算外面undefined被定義了,也不會影響函式內部的。這就最大程度防止外界的變數定義對所做封裝的內部造成影響。
3、其他
$(function())的簡寫。
4、module模式
特點:1、模組化,可重用
2、封裝了變數和function,和全域性的命名空間不接觸,松耦合
3、只暴露可用public的方法,其它私有方法全部隱藏
// 建立乙個立即呼叫的匿名函式表示式// return乙個物件,物件中你要暴露的東西
// 返回這個變數將賦值給counter
var counter = (function(),
set:function(val),
increment:function()
}}())
console.log(counter.get()); //10
counter.set(100);
console.log(counter.increment()) //101
js函式的宣告及自呼叫
在js中函式通常擁有兩種命名方式 1.函式宣告 function a,b,c.函式宣告必須以function欄位開頭,是該函式的函式名,小括號中的a,b,c是該函式引用的引數,大括號中是該函式的具體方法。使用函式宣告的函式會提公升其優先度,因此我們可以在同一作用域的任何區域宣告,不會影響我們使用。2...
js函式實現遞迴自呼叫的方法
1.通過函式自身名字遞迴呼叫 function sum num else console.log sum 5 15 這種通過函式名字呼叫自身的方式存在乙個問題 函式的名字是乙個指向函式物件的指標,如果我們把函式的名字與函式物件本身的指向關係斷開,這種方式執行時將出現錯誤。2.通過arguments....
js閉包和函式自調
js沒有c 中class的public和private的區分 es5中 只有全域性變數和區域性變數這兩種,引入閉包就使得js有了私有變數這一概念。下面給出閉包的定義 閉包 是指有權訪問另乙個函式作用域中的變數的函式,建立閉包的最常見的方式就是在乙個函式內建立另乙個函式,通過另乙個函式訪問這個函式的區...