06JavaScript基礎
核心知識點
函數 2. 函數中的參數 2. 函數中的返回值
今日學習目標
能夠完成函數相關案例 2. 能夠理解函數中的參數 2. 能夠理解函數中的返回值
函數
為什么要學函數?
1. 求 1 到100 之間的數字之和
什么是函數?
函數的概念
函數: 可以封裝一段特定功能代碼,然后通過函數名調用,實現對該段代碼重復使用
函數的作用
實現代碼的重復使用。
? 對分散代碼整合(封裝)
? 重復使用
創建函數
方式一: 函數聲明及執行方式(推薦) ? 函數的聲明:function 自定義函數名 ( ) { 具體的功能代碼}
注意:1. 由于函數是用來實現某種特定功能代碼,所以一般我們設置函數名的時候,以動詞開始。2. 函數不能自己執行代碼,需要通過函數名調用實現代碼的執行? 調用函數(執行函數)函數名 ( ) ;
方式二:函數表達式(字面量)及執行方式(了解) var fn = function ( ) { } fn ( ) ;
課堂一練 1. 將比較數字大小封裝到一個函數中
2. 寫一個函數,求1 - 100 之間所有數的和
3. 通過函數方式實現:判斷一個數字是基數還是偶數
4. 通過函數的方式實現: 在頁面中打印一個10 行直角三角形
5. 格式化日期的封裝 yyyy- mm- dd hh: mm: ss
函數的參數
思考: 利用函數如何計算任意兩個數字之和?
形參 在 函數創建時,在小擴號中定義的變量語法:
function 函數名 ( 形參, 形參, 形參... ) {
} 注意:1 函數也可以做為參數進行傳遞
實參 實參,在函數調用時,在小擴號中所傳入的實際的數據。語法:
函數名 ( 數據, 數據, 數據... ) ;
課堂一練 ? 求 n - m 之間的數字之和 ? 求圓的面積 (3.14 * r* r)? 求3 個數中的最大值 ? 判斷一個數是奇數還是偶數 ? 求5 個數的總和
函數的返回值
思考: 如何在函數外面獲取到上面代碼計算出的任意兩個數之和?
返回值:函數執行完后,可以把執行的結果 通過 return 語法 返回給 調用者 function add ( num1,num2) {
return num1 + num2;
}
var resNum = add ( 21 , 6 ) ;
alert ( resNum) ; 注意:1. 如果函數沒有顯示的使用 return 語句 ,那么函數有默認的返回值:undefined2. 如果函數中寫了return 語句,后面沒有寫任何其他內容,那么函數的返回值依然是 undefined3. 一個函數只能有一個返回值4. return 代碼執行完成后,后面的代碼不再執行5. 函數也可以作為返回值(理解)
課堂一練 1. 獲取數組中最大值,并返回2. 將一個數組中所有偶數添加到一個新數組中返回,并計算新數組總和。3 寫一個函數,判斷是否是閏年【能被4 整除且不能被100 整除,或者能被400 整除】
課后練習
1. 寫一個函數,實現對數字數組的排序。
2. 寫一個函數,用戶輸入任意兩個數字, 獲取最大值并返回 統計班級學生就業薪資,計算總薪資 和 平均薪資。統計班級學生就業薪資,計算薪資超過15000 的人的個數。給一個不重復的數字數組,求最大值和最大值的在數組中的位置給一個字符串數組,將數組中的每一個數據拼接在一起,每個數據之間用 | 符合拼接。 如: ‘張三| 李四| 王五’給一個數字數組,該數組中有很多數字0 ,將不為0 的數據存入到一個新的數組中
函數其他部分
arguments的使用
? 思考: 1. 如果一個函數的參數個數不確定該如何獲取?2. 演示console. log ( ) 中不同個數參數的效果3. 介紹arguments對象? 通過 arguments獲取到函數參數的個數 【不確定函數到底有多少個參數】? 總結:1. 如果函數參數不確定,可以定義函數的時候不寫參數,通過arguments獲取2. 如果函數的參數確定,那么推薦定義函數的時候寫參數課堂案例: 1. 求任意個數中的最大值2. 求任意個數的和
匿名函數和自調用函數
? 匿名函數: 沒有函數名的函數
例如:
var fn = function ( ) { }
?總結:1. 匿名函數不能單獨使用2. 可以將匿名函數賦值給一個變量3. 可以讓匿名函數自己調用自己(自調用函數【匿名函數】)? 自調用函數: 函數封裝好,立即執行。總結:1. ( function ( ) { } ) ( ) ;
? 函數屬于一種數據類型
? 函數作為參數
? 函數可以為返回值
函數作用域及局部變量
作用域 ? 思考: 在函數內部定義的變量,在函數外部能否訪問該變量作用域: 變量或者函數可以起作用的區域◆ 全局作用域(全局變量)1 ,在script標簽中或者js文件中定義的變量,在任何地方都可以訪問2 , 在函數內部聲明變量不使用var 關鍵字 (不建議使用)◆ 局部作用域(局部變量)1 , 在函數內部定義的變量2 , 局部變量只能在定義變量的函數中使用◆ 塊級作用域 (目前所學版本沒有,新版本語義中有塊級作用域){ 塊級作用域} 1. 本質上塊級作用域中的變量在外部不能訪問2. 但是在js中可以訪問塊級作用域的變量(證明js沒有塊級作用域)
全局作用域(全局變量) 聲明在所有函數外部的變量,可以所有地方使用
局部作用域(局部變量) 聲明在某個函數內部的變量或函數的形參,只能在函數內部使用
作用域鏈
作用域鏈:當訪問一個變量時,會先從本作用域中去找這個變量,若找不到則向上一級作用域中去找,依次類推,就形成了一個作用域鏈。
作用域鏈面試題
? 分析代碼執行結果var a = 1;function fn1(){var a = 2;function fn2(){console.log(a); //a的值 }fn2()}fn1();? 分析代碼執行結果function f1 () {var num = 123;function f2 () {console.log( num );}f2 ();} var num = 456;f1();
代碼預解析
? 代碼在執行前會進行預解析。1. 變量聲明提升,把變量提升到當前作用域的最上面,不包括賦值2. 函數聲明提升,把函數提升到當前作用域的最上名,不包括函數的調用