一、函數(shù)
1、函數(shù)概述
? ? ? ? 實際上就是多行代碼的抽?。ǘ嘈写a會構成特定的功能)
2、、函數(shù)的優(yōu)點
? ? ? ? 減少冗余代碼(重復的代碼放在函數(shù)里來封裝起來)
? ? ? ? 提高了代碼的可維護性以及可閱讀性
3、函數(shù)分類
? ? ? ? 系統(tǒng)函數(shù)? ? window里面的所有函數(shù)都屬于系統(tǒng)函數(shù)(console.log(),alert())
? ? ? ? 內(nèi)置函數(shù)? ? 所有的內(nèi)置對象里面的函數(shù)都叫內(nèi)置函數(shù)(Math.pow()...)
? ? ? ? 自定義函數(shù)? ? 自己定義的函數(shù)
注:內(nèi)置和系統(tǒng)函數(shù)更關注使用,而自定義函數(shù)關注定義以及使用
4、自定義函數(shù)的定義以及調(diào)用
? ? ? ? 1)、使用function關鍵詞定義匿名函數(shù)(沒有名字的函數(shù))
? ? ? ? ? ? 例:
? ? ? ? ? ? ? ? ? ? function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? consolo.log(' ')
????????????????????????}
? ? ? ? 注:匿名函數(shù)直接調(diào)用,讓其他事件去自動調(diào)用,聲明比較少,沒有復用價值
? ? ? ? ? ? ? ? ? ? 自執(zhí)行函數(shù):
? ? ? ? ? ? ? ? ? ? ? ? (function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(' ')
????????????????????????????}()
? ? ? ? ? ? ? ? 注:自執(zhí)行函數(shù)不能傳參,函數(shù)調(diào)用后面帶(),自執(zhí)行的匿名函數(shù),沒有復用價值,只能用一次
? ? ? ? 2)、使用function關鍵詞定義具名函數(shù)(有名字的函數(shù))
? ? ? ? ? ? ? ? ?第一種:? ?function 函數(shù)名(形參1,形參2....){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)體(代碼塊)
????????????????????}
? ? ? ? ? ? ? ? ? ? 變種的具名函數(shù):
? ? ? ? ? ? ? ? ? 第二種:? var? ? ?函數(shù)名 = function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 代碼塊
????????????????????}
? ? ? ? ? ? ? ? ? ? 注:對于調(diào)用速度來說,第一種更快,因為function和var在預解析階段就會聲? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????明,而var關鍵詞修飾的變量在預解析階段是不會賦值的
? ? ? ? 3)、使用new Function聲明(new后面的Function首字母一定要大寫)
? ? ? ? ? ? ? ? var? ? 函數(shù)名? ? =? ? new? ? Function('????形參1,形參2....????'????'????函數(shù)內(nèi)容題????')
? ? ? ? ? ? ? ? 預解析:
? ? ? ? ? ? ? ? ? ? ? ? 預解析會做的事情:1、它會在聲明對應function和var關鍵詞修飾的變量開辟內(nèi)存
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2、對應的function的內(nèi)存空間開辟以后它會將對應的代碼塊放在里面,等待調(diào)用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3、var修飾的關鍵詞,只會開辟一個空間,并不會進行復制(默認undefined)
return關鍵詞
return返回對應的數(shù)據(jù),調(diào)用return后,后面的內(nèi)容將不再執(zhí)行,如果沒有return,默認返回undefined
函數(shù)執(zhí)行過程
1、方法棧:也稱執(zhí)行棧,是吧對應開辟的function內(nèi)存里面的代碼塊丟給他去執(zhí)行
2、執(zhí)行棧會自動去執(zhí)行對應的方法,執(zhí)行完返回對應結果
作用域
當前一個變量的作用范圍,分為局部,全局作用域
1.局部變量:位于某一個代碼里面,稱為局部變量,不能被全局訪問(解決:變量提升為全局變量)
2、作用域鏈:先往同級的地方找,找不到向上面找,一直找到為止
注:如果外面沒有聲明變量,找不到變量就會報錯
3、局部作用域:在一個函數(shù)內(nèi)聲明的或者在一段代碼塊內(nèi)聲明的,作用范圍是當前的代碼塊
4、全局作用域:在對應的全局聲明的,作用范圍是全局