四、函式初級
什麼是函式: 具有特定功能的**塊
函式與方法的區別: 呼叫方式的不同: 函式通過函式名 | 方法通過呼叫者.語法呼叫
如何定義函式:
function 函式名(引數列表)
函式的分類:
無參函式:
function fn1()
fn1();
有參函式:
function fn2(a,b)
fn2(10,20);
1、函式的定義
es5中定義函式
function 函式名 (引數列表)
var 函式名 = function (引數列表)
es6中定義函式
let 函式名 = (引數列表) =>
匿名函式
(function (引數列表) )
// 匿名函式需要自呼叫
(function (引數列表) )(引數列表);
var fn3=function()
fn3();
匿名函式的自呼叫:
(function())()
為什麼要出現匿名函式的自呼叫
在es5 的時候,沒有塊級作用域的概念,想要產生區域性作用域的變數只能通過在函式體內部定義變數了, 所以匿名函式的自呼叫很多時候是為了生成一個區域性的作用域
(function())();
2、函式的呼叫
函式名(引數列表)
注意: 函式的呼叫()一定不可以省略,引數列表看情況(不管需不需要,均可以傳或不傳)
系統不會在()()之間新增; 作為結束語句,需要新增分號時一定需要手動新增
3、函式的引數
js中有參函式呼叫的原則:
js中只有位置引數,沒有關鍵字引數
傳引數的時候, 無論傳多少個值,嚴格按照位置引數進行一一對應進行傳值, 多傳的引數沒有對應的位置引數進行接收時會自動被丟棄
在傳參的時候指定哪個值為多少時要按照位置進行傳值,按照引數名進行傳值是無效的
function func1()
// 傳不傳引數均可以呼叫
func1();
func1(10, 20);
function func2(a, b)
func2()
func2(10)
func2(10, 20)
func2(10, 20, 30)
預設值引數
使用預設值引數時,傳入的值也是按照位置進行傳值的
不管該位置引數是否有預設引數,只要該位置有值傳進來該位置上的引數值就會被替代
function func3(a, b=20, c, d=40)
var temp = 1000;
func3(10, 100, temp) // 函式呼叫傳入的實際值,或擁有實際值的變數為實參
js中函式傳參時的大致規則:
個數不需要統一
function fn (a, b, c)
fn(100);
function fn (a)
fn(100, 200, 300) // 200,300被丟棄
可以任意位置具有預設值
function fn (a, b=20, c, d=40)
fn(100, 200, 300);
通過...語法接收多個值
function fn (a, ...b)
fn(100, 200, 300);
// ...變數必須出現在引數列表最後
函式的引數小結::
1.實參與形參個數可以不匹配,隨意規定
2.形參可以設定預設值(並非為py中的關鍵字引數)
3.實參對形參進行傳值時,完全採用位置匹配(eg:第n個實參一定將值傳遞給第n個形參)
4、返回值
function fn ()
// 1.可以空return操作,用來結束函式
// 2.返回值可以為任意js型別資料
// 3.函式最多隻能擁有一個返回值
js的函式只能返回一個值, 這個值可以為任意型別(如果想返回多個值,將多個值放到陣列或物件中)
let func4 = () => ;
console.log(func4())
函式的返回值小結::
1.函式的返回值有return來明確,沒有明確,則相當於返回undefined
2.函式只能返回一個值
3.函式的返回值就是函式的執行結果,也就是函式值
---------------------
原文: