一、函數(shù)
1、函數(shù)概述
? ? ? ? 實際上就是多行代碼的抽日酃(多行代碼會構成特定的功能)
2、盖腿、函數(shù)的優(yōu)點
? ? ? ? 減少冗余代碼(重復的代碼放在函數(shù)里來封裝起來)
? ? ? ? 提高了代碼的可維護性以及可閱讀性
3爽待、函數(shù)分類
? ? ? ? 系統(tǒng)函數(shù)? ? window里面的所有函數(shù)都屬于系統(tǒng)函數(shù)(console.log(),alert())
? ? ? ? 內置函數(shù)? ? 所有的內置對象里面的函數(shù)都叫內置函數(shù)(Math.pow()...)
? ? ? ? 自定義函數(shù)? ? 自己定義的函數(shù)
注:內置和系統(tǒng)函數(shù)更關注使用翩腐,而自定義函數(shù)關注定義以及使用
4鸟款、自定義函數(shù)的定義以及調用
? ? ? ? 1)、使用function關鍵詞定義匿名函數(shù)(沒有名字的函數(shù))
? ? ? ? ? ? 例:
? ? ? ? ? ? ? ? ? ? function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? consolo.log(' ')
????????????????????????}
? ? ? ? 注:匿名函數(shù)直接調用茂卦,讓其他事件去自動調用何什,聲明比較少,沒有復用價值
? ? ? ? ? ? ? ? ? ? 自執(zhí)行函數(shù):
? ? ? ? ? ? ? ? ? ? ? ? (function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(' ')
????????????????????????????}()
? ? ? ? ? ? ? ? 注:自執(zhí)行函數(shù)不能傳參等龙,函數(shù)調用后面帶()处渣,自執(zhí)行的匿名函數(shù),沒有復用價值蛛砰,只能用一次
? ? ? ? 2)罐栈、使用function關鍵詞定義具名函數(shù)(有名字的函數(shù))
? ? ? ? ? ? ? ? ?第一種:? ?function 函數(shù)名(形參1,形參2....){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 函數(shù)體(代碼塊)
????????????????????}
? ? ? ? ? ? ? ? ? ? 變種的具名函數(shù):
? ? ? ? ? ? ? ? ? 第二種:? var? ? ?函數(shù)名 = function(){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 代碼塊
????????????????????}
? ? ? ? ? ? ? ? ? ? 注:對于調用速度來說暴备,第一種更快悠瞬,因為function和var在預解析階段就會聲? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????明,而var關鍵詞修飾的變量在預解析階段是不會賦值的
? ? ? ? 3)涯捻、使用new Function聲明(new后面的Function首字母一定要大寫)
? ? ? ? ? ? ? ? var? ? 函數(shù)名? ? =? ? new? ? Function('????形參1浅妆,形參2....????'????'????函數(shù)內容題????')
? ? ? ? ? ? ? ? 預解析:
? ? ? ? ? ? ? ? ? ? ? ? 預解析會做的事情:1、它會在聲明對應function和var關鍵詞修飾的變量開辟內存
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2障癌、對應的function的內存空間開辟以后它會將對應的代碼塊放在里面,等待調用
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3凌外、var修飾的關鍵詞,只會開辟一個空間涛浙,并不會進行復制(默認undefined)
return關鍵詞
return返回對應的數(shù)據(jù)康辑,調用return后摄欲,后面的內容將不再執(zhí)行,如果沒有return疮薇,默認返回undefined
函數(shù)執(zhí)行過程
1胸墙、方法棧:也稱執(zhí)行棧,是吧對應開辟的function內存里面的代碼塊丟給他去執(zhí)行
2按咒、執(zhí)行棧會自動去執(zhí)行對應的方法秒咨,執(zhí)行完返回對應結果
作用域
當前一個變量的作用范圍利凑,分為局部乡洼,全局作用域
1.局部變量:位于某一個代碼里面变抽,稱為局部變量,不能被全局訪問(解決:變量提升為全局變量)
2掠抬、作用域鏈:先往同級的地方找吼野,找不到向上面找,一直找到為止
注:如果外面沒有聲明變量两波,找不到變量就會報錯
3瞳步、局部作用域:在一個函數(shù)內聲明的或者在一段代碼塊內聲明的,作用范圍是當前的代碼塊
4腰奋、全局作用域:在對應的全局聲明的谚攒,作用范圍是全局