~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
開發工具與關鍵技術:Adobe Dreamweaver && JavaScript
作者:韋永桂
撰寫時間:2020 年04 月 23 日
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
一、關于函式:函式function
- 函式也是一個物件
- 函式中可以封裝一些功能(代碼),在需要的使用可以執行這些功能(代碼)
- 函式中可以保存一些代碼在需要的時候呼叫
- 使用typeof檢查一個函式物件時,會回傳function
二、函式的創建:
1. 使用建構式創建一個函式物件

2. 使用函式宣告創建一個函式
語法:function 函式名([形參1,形參2,...,形參N]){
//陳述句
}
說明:[形參1,形參2,...,形參N]這里的[]表示可以使用引數也可以不使用引數
函式的呼叫:函式名([實參1,實參2,...]);

3.使用函式運算式創建一個函式/匿名函式


三、函式的引數:
1.呼叫函式時決議器不會檢查實參的型別,所以要注意,是否有可能會接收到非法的引數,如果有可能則需要對引數進行型別的檢查
2.呼叫函式時,決議器也不會對檢查實參的數量多余的引數將不會被賦值,如果實參少于形參的資料,則沒有對應實參的形參將是undefined

四、函式的回傳值:
可以通過return 來回傳函式的回傳值
語法:return 值;
return 后面值將會作為函式的執行結果回傳,
可以定義一個變數來接收函式的回傳值
在函式return后的陳述句都不會執行
如果return陳述句后不跟任何值,就相當于回傳一個undefined


五、立即執行函式:
函式定義完,立即被呼叫,這種函式叫做立即執行函式
立即執行函式往往只會執行一次

六、函式的方法:
函式也可以作為物件的屬性,如果一個函式作為一個物件的屬性保存,那么我們稱這個函式是這個物件的方法。呼叫函式就所呼叫物件的方法,但是它只是名稱上的區別沒有其他的區別。

七、列舉物件中的屬性
使用for ... in 陳述句
for in 語法
for(var 變數 in 物件){
//陳述句
}

八、作用域:
- 作用域指一個變數的作用范圍
- JS中一共兩種作用域
1.全域作用域
- 直接寫在script標簽的JS代碼,都在全域作用域
- 全域作用域在頁面打開的時候創建,在頁面關閉時銷毀
- 在全域作用域中有一個物件window,它代表一個瀏覽器的視窗,它由瀏覽器創建,我們可以直接使用
- 在全域作用域中:
創建的變數都會作為window物件的屬性保存
全域中的函式都會作為window物件的方法保存
- 全域作用域中的變數都是全域變數
在頁面的任意的部分都可以訪問到
2.函式作用域(區域作用域)
- 呼叫函式時創建函式作用域,函式執行完畢以后,作用域銷毀
- 每呼叫一次函式就會創建一個新的函式作用域,他們之間是相互獨立的
- 在函式作用域中可以訪問全域變數,
但在全域作用域中無法訪問到區域變數
- 當在函式作用域操作一個變數時,它會先在自身作用域中尋找,如果有就直接使用,如果沒有就向上一作用域中尋找,直到找到全域作用域,如果全域作用域中仍然沒有找到,則會報錯ReferenceError
- 在函式中想要訪問全域變數可以使用window物件
九、This:決議器在呼叫函式每次都會向函式內部傳遞一個隱含的引數
這個隱含的引數就是this,this指向的是一個物件,
這個物件我們稱為函式執行的背景關系物件,
根據函式呼叫方式不同,this會指向不同的物件
總結this:
1.以函式的形式呼叫時,this永遠都是window
2.以方法的形式呼叫是,this就是呼叫方法的那個物件
十、建構式:
創建一個建構式,專門用來創建Person物件
建構式就是一個普通的函式,創建方式和普通函式沒有區別,
不同的是建構式習慣上首字母大寫
- 建構式和普通函式的區別就是呼叫方式的不同
普通函式是直接呼叫,而建構式需要使用new關鍵字來呼叫
- 建構式的執行流程
1.立刻創建一個新的物件
2.將新建的物件設定給函式中的this,在建構式中可使用this來參考新建的物件
3.逐行執行函式中的代碼
4.將新建的物件作為回傳值回傳
- 使用同一個建構式創建的物件,我們稱為一類物件,
也將一個建構式稱為一個類。
我們將通過一個建構式創建的物件,稱為該類的實體*
- 對this的情況進行總結:
1.當以函式的形式呼叫時,this就是window物件
2.當以方法的形式呼叫時,this就是呼叫方法的這個物件
3.當以建構式的形式呼叫時,this就是新創建的物件
- 在創建Person建構式中,為每個物件都添加了一個sayhello方法
目前我們的方法都是在構造方法內部創建的,也就是建構式每執行一次就會創建一個新的sayhello方法,也就是說所有實體的sayhello都是唯一的。這樣就導致了建構式執行一次就會創建一個新的方法。執行多少次就會創建多少個新的方法,而這些方法都是一模一樣的,這樣就導致了記憶體空間的浪費,其實我們可以讓所有物件共享同一個方法
十一、原型prototype
我們創建的每一個函式,決議器都會向函式中添加一個屬性prototype
這個屬性對應著一個物件,這個物件就是我們所謂的原型物件
如果函式作為普通函式呼叫prototype沒有任何作用
當函式以建構式的形式呼叫時,它所創建的物件中都有會一個隱藏的屬性
指向該建構式的原型物件,我們可以通過__proto__來訪問該屬性
原型物件就相當于一個公共的區域,所有同一個類的實體都可以訪問到這個原型物件
我們可以將物件中共有的內容,統一設定到原型物件中
當我們訪問物件的一個屬性或方法時,它會先在物件自身中尋找,如果有則直接使用,如果沒有則會去原型物件中尋找。如果找到則直接使用
以后我們創建建構式時,可以將這些物件共有的屬性和方法,統一添加到建構式的原型物件中,這樣不用分別為每個物件添加,也不會影響到全域作用域,就可以使每個物件都具有這些屬性和方法了。
十二、垃圾回收(GC)
- 就像人生活的時間長了會產生垃圾一樣,程式運行程序中也會產生垃圾
這些垃圾積攢過多以后,就會導致程式運行的速度過慢,
所以我們需要一個垃圾回識訓制,來處理程式運行程序過產生垃圾
- 當一個物件沒有任何的變數或則屬性對他進行參考,此時我們將永遠無法操作該物件,此時這種物件就是一個垃圾,這種物件過多會占用大量的記憶體空間,導致程式運行變慢,所以這種垃圾必須清理。
- 在JS中擁有自動的垃圾回識訓制,會自動將這些垃圾物件在記憶體中銷毀,我們不需要也不能進行垃圾回收的操作。
- 我們需要做的知識將不再使用的物件設定為null即可
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/59658.html
標籤:JavaScript
上一篇:VUE參考js的問題。
