標籤:ros 缺點 cti javascrip 記憶體 var global 記憶體泄露 傳回值
function 1.
定義:一段預先設定的代碼塊,可以反覆調用,根據輸入參數的不同,返回不同的值; 2.
函數的聲明方法: (1)function 命令聲明函數 function fname( ){ }; (2)函數運算式: var a=function( ){ } ; (3)Function 建構函式:var a=new Function( ) ; ——不常用;、 3.
函數的覆蓋: 函數若被重複聲明,後面的聲明會覆蓋前面的聲明; 4.
函數的調用方法:(1)、()運算子 funcName( ) ,()可以加入函數的參數; (2)、 window . funcName( ) 5.
return : 函數體內部可以加入return語句,return所帶的運算式是函數傳回值; 6.
不允許在非函數代碼中聲明函數,允許函數套函數;
7.(1)
name屬性: 返回緊跟在function關鍵字之後的那個函數名; (2)
length屬性: 返回形參的個數; (3)
arguments (類數組) :返回函數實參的個數; 函數傳參:形參,實參 function abc( 形參1,形參2,.......形參n){ ... 實參1,2,.....n
判斷實參arguments,且arguments 類似數組
}
8. 函數的參數不是必需的,js允許省略參數;
9.
自執行函數 :(1) (function(){ code } )(); eg: ( kk=function(){
alert("測試自執行");
})();
(2)(function(){ code } ());
eg: ( LL=function(){
alert(‘22222‘);
}()) ;
(3) !function(){ code }();
eg: !function(){
alert(‘3333‘);
}();
10.
函數的範圍(scope):變數存在的範圍;
1、全域範圍 (整個window都可以調用)
2、函數(局部)範圍 (指的是函數內部變數)
(1)在函數外部聲明的變數就是全域變數(global variable);在函數內部可以使用全域變數(整個window都可以調用); (2)在函數內部定義的變數,外部無法讀取,稱為“局部變數”;
11.閉包 函數內部聲明變數一定要用var,否則聲明了一個全域變數; 閉包本質:將函數內部和外部串連起來的橋樑,可以簡單理解為函數套函數。 閉包的用處: 1.讀取函數內部變數 2.讓這些變數始終保持在記憶體中,閉包使它的誕生環境一直存在 3.封裝對象的私人屬性和私人方法 ---------------------------------------------以下內容來自搜尋整理------------------------------------------------閉包原理及應用 1.為什麼需要閉包? 保護函數內的變數安全。在記憶體中維持一個變數。 通過保護變數的安全實現JS私人屬性和私人方法(不能被外部存取)
2.怎麼釋放被閉包的變數記憶體?在Javascript中,如果一個對象不再被引用,那麼這個對象就會被GC回收。如果兩個對象互相引用,而不再被第3者所引用,那麼這兩個互相引用的對象也會被回收。因為函數a被b引用,b又被a外的c引用,這就是為什麼函數a執行後不會被回收的原因。
3.代碼中函數a的內建函式b,被函數a外面的一個變數c引用的時候,這就叫建立了一個閉包。有時候函數b也可以用一個匿名函數代替來返回,即
return function(){};
優點:1.保護函數內的變數安全,加強了封裝性
2.在記憶體中維持一個變數(用的太多就變成了缺點,占記憶體)
閉包之所以會佔用資源是當函數a執行結束後, 變數i不會因為函數a的結束而銷毀, 因為b的執行需要依賴a中的變數。
4.不適合情境:返回閉包的函數是個非常大的函數
閉包的典型架構應該就是jquery了。
閉包是javascript語言的一大特點,主要應用閉包場合主要是為了:設計私人的方法和變數。
這在做架構的時候體現更明顯,有些方法和屬性只是運算邏輯過程中的使用的,不想讓外部修改這些屬性,因此就可以設計一個閉包來只提供方法擷取。
5.閉包的缺點就是常駐記憶體,會增大記憶體使用量量,使用不當很容易造成記憶體泄露。
<---------學習筆記,謝謝指正!-------->
JavaScript-Function基礎知識