前面的話:JavaScript可運行在所有主要平臺的主流瀏覽器上,也可運行在每一個主流操作系統的服務器端上。所以呢,要想成爲一名優秀的全棧工程師,必須懂得JavaScript語言。這是我整理的JS的部分函數問題,供大家參考借閱,有不妥的地方也請多多指教。
1、函數的三要素
1.1 函數的功能
1.2 函數的參數
a. 形參——定義函數的時候,沒有實際的值,給實參佔位
b. 實參——調用函數的時候,有實際的值;
c. 當調用函數的時候會把實參複製一份傳遞給函數
d. 函數調用的時候,實參和形參的個數可以不等
e. 在其他語言中,有重載的概念,即函數的名字相同,但參數個屬不同;但javascript中沒有重載的概念。下面的相同名稱的函數會把上面的函數覆蓋
1.3 函數的返回值——返回計算的結果
1)函數返回,後續的代碼不會執行
2)如果return後面跟內容了,就返回return後面的內容
3)如果return後面沒有跟內容,返回undefined,return後面的代碼不會執行
4)如果函數內部沒有寫返回值,返回undefined
5)推薦的作法是要麼讓函數始終都返回一個值,要麼永遠都不要返回值
2、函數參數的注意點
function funName(a, b) { }
2.1 判斷輸入的參數是否爲空(過濾掉undefined null NaN " " 0)
a = a || 0;
b = b || 0;
2.1 判斷輸入的參數是否爲數字
3、函數的基本形式(4種)
——無參數無返回值
——有參數無返回值
——無參數有返回值
——有參數有返回值
4、/ * * +回車 對函數進行註釋,如下圖:
5、函數調用
5.1 一個函數內部調用另一個函數的執行過程:
當f2執行完畢之後,會返回到f1繼續執行後續的代碼;
1 function f1() {2 var a = 10;3 f2();4 }5 f1 ();6 f1 ();
5.2 函數對自身的調用稱爲遞歸【自調用函數】
——遞歸會消耗資源,當自身調用太多次仍會出現報錯。
5.3 函數是一種數據類型 function
①函數可以作爲另一種函數的參數(如5.1)
②函數可以作爲函數的返回值
6、函數定義的兩種方式
6.1 函數聲明 function fn() { }
6.2 函數表達式 var myFun = function () {} //這裏調用的是匿名函數
6.3 函數聲明和函數表達式的區別:
i)函數聲明——函數提升
ii)函數表達式——變量提升(下面會詳細介紹)
7、變量的作用域
7.1 全局作用域:在任何位置都可以訪問【全局變量】
i)在script標籤中定義的變量
ii)不使用var聲明的變量
iii)在關閉網頁或瀏覽器,全局變量纔會釋放
7.2 局部作用域:在函數內部聲明一個變量,只能在該函數內部使用【局部變量】
i)只有在函數內部使用var定義的變量
ii)超出函數的作用範圍後,局部變量被銷燬
7.3 javascript中沒有塊級作用域
i)塊級作用域:在其他語言中,在代碼塊中定義的變量,外部是訪問不到的;
ii)if 和 for 中使用var定義的變量都是全局變量
8、函數提升和變量提升(過程)
8.1 函數內部,獲取變量的時候,會先在當前作用域下找,有沒有變量聲明,如果有就返回當前作用域中變量的值
8.2 如果當前作用域中沒有對應變量的聲明,會返回上一級去找
1)解析器預解析的過程:
i,解析器
①全局作用域 預解析
a) var num ; b) function fun ()
②一行一行執行代碼
a) num = 10; b) fun (); 調用fun函數 i) fun的局部作用域 One. 預解析 First. var num; Two. 一行一行執行代碼 First. console.log(num); 輸出undefined Second. num = 20;
var num; function fun () { var num; console.log (num ); num = 20; } num = 10; fun();
var num = 10; fun();function fun () { var num; console.log (num ); num = 20; } // 函數內部訪問外部變量 var a = 10; function fn () { console.log(a); }
2)變量提升——定義變量的時候,變量的聲明會被提升到作用域的最上面,變量的賦值不會提升
3)函數提升——JavaScript解析器首先會把當前作用域的函數聲明提前到整個作用域的最前面
9、構造函數與自定義構造函數
9.1 構造函數:構造一個對象,並且返回的函數
——調用構造函數: var student = new Object ();
① 構造函數的目的是用來創建對象
② 使用new Object()創建對象
③ 封裝函數創建多個對象
④ 自定義構造函數
9.2 自定義構造函數
① 內存開闢空間,存儲新創建的對象 new Object ();
② 會把this設置爲當前對象
③ 執行函數內部的代碼,設置對象的屬性和方法
④ 返回新創建的對象