- JavaScript是一種專(zhuān)為與網(wǎng)頁(yè)交互而設(shè)計(jì)的腳本語(yǔ)言,由三部分組成
- ECMAScript,提供核心語(yǔ)言功能
- 文檔對(duì)象模型(DOM),提供訪問(wèn)和操作網(wǎng)頁(yè)內(nèi)容的方法和接口
- 瀏覽器對(duì)象模型(BOM),提供與瀏覽器交互的方法和接口
- sciprt標(biāo)簽
<script async charset defer src type="text/script"></script>
async:表示應(yīng)該立即下載腳本,但不應(yīng)妨礙頁(yè)面中的其他操作,比如下載其他資源或等待加載其他腳本。只對(duì)外部腳本文件有效。(讓頁(yè)面等待兩個(gè)腳本下載和執(zhí)行,從而異步加載頁(yè)面其他內(nèi)容)
charset:表示通過(guò) src 屬性指定的代碼的字符集
defer:表示腳本可以延遲到文檔完全被解析和顯示之后再執(zhí)行。只對(duì)外部腳本文件有效(瀏覽器立即下載,延遲執(zhí)行)
src:表示包含要執(zhí)行代碼的外部文件,指向相應(yīng)文件的 URL,而這個(gè)文件既可以是與包含它的頁(yè)面位于同一個(gè)服務(wù)器上的文件,也可以是其他任何域中的文件
type:表示編寫(xiě)代碼使用的腳本語(yǔ)言的內(nèi)容類(lèi)型
只要不存在 defer 和 async 屬性,瀏覽器都會(huì)按照<script>元素在頁(yè)面中出現(xiàn)的先后順序?qū)λ鼈円来芜M(jìn)行解析。在文檔的<head>標(biāo)簽中包含所有的JavaScript文件,意味著必須等到全部 JavaScript 代碼都被下載、 解析和執(zhí)行完成以后,才能開(kāi)始呈現(xiàn)頁(yè)面的內(nèi)容(瀏覽器在遇到<body>標(biāo)簽時(shí)才開(kāi)始呈現(xiàn)內(nèi)容),因此,一般講script標(biāo)簽的引用放在body標(biāo)簽內(nèi),這樣在解析包含的 JavaScript 代碼之前,頁(yè)面的內(nèi)容將完全呈現(xiàn)在瀏覽器中
- JavaScript文件外部引用優(yōu)點(diǎn)
- 可維護(hù)性
- 可緩存(多個(gè)頁(yè)面引用同個(gè)文件,該文件只需下載一次,加快了頁(yè)面加載速度)
- 數(shù)據(jù)類(lèi)型
Undefined Number Boolean String Null Object 6種數(shù)據(jù)類(lèi)型
- typeof 返回?cái)?shù)據(jù)類(lèi)型
- undefined類(lèi)型 :使用 var 聲明變量但未對(duì)其加以初始化時(shí),這個(gè)變量的值就是 undefined
- null類(lèi)型:null 值表示一個(gè)空對(duì)象指針,如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象,那么最好將該變量初始化為 null
*數(shù)值轉(zhuǎn)換:Number()、 parseInt()、 parseFloat()->可帶第二個(gè)參數(shù),表示進(jìn)制,如parseInt('AF',16)
- js 基本類(lèi)型值和引用類(lèi)型值
引用類(lèi)型值是保存在內(nèi)存中的對(duì)象,js不能直接操作對(duì)象的內(nèi)存空間,而是操作對(duì)象的引用
函數(shù)的參數(shù)是按值傳遞的
- 檢測(cè)類(lèi)型
typeof 確定變量是字符串、布爾值、數(shù)值等
instanceof 判斷它是什么類(lèi)型的對(duì)象
- 環(huán)境
在web瀏覽器中,全局執(zhí)行環(huán)境被認(rèn)為是window對(duì)象,因此所有全局變量和函數(shù)都是作為window對(duì)象的屬性創(chuàng)建的。某個(gè)執(zhí)行環(huán)境中,所有代碼執(zhí)行完畢后,該環(huán)境被銷(xiāo)毀,保存在其中的所有變量和函數(shù)定義也隨之銷(xiāo)毀
小結(jié)之變量
- 基本類(lèi)型值在內(nèi)存中占據(jù)固定大小的空間,因此被保存在棧內(nèi)存中
- 從一個(gè)變量向另一個(gè)變量復(fù)制基本類(lèi)型的值,會(huì)創(chuàng)建這個(gè)值的一個(gè)副本
- 引用類(lèi)型的值是對(duì)象,保存在堆內(nèi)存中
- 包含引用類(lèi)型值的變量實(shí)際上包含的并不是對(duì)象本身,而是一個(gè)指向該對(duì)象的指針
- 從一個(gè)變量向復(fù)制另一個(gè)變量復(fù)制引用類(lèi)型的值,復(fù)制的其實(shí)是指針,因此兩個(gè)變量最終都指向同一個(gè)對(duì)象
小結(jié)之作用域
所有變量(包括基本類(lèi)型和引用類(lèi)型)都存在于一個(gè)執(zhí)行環(huán)境(也稱為作用域)當(dāng)中,這個(gè)執(zhí)行環(huán)境決定了變量的生命周期,以及哪一部份代碼可以訪問(wèn)其中的變量
- 執(zhí)行環(huán)境分全局環(huán)境和函數(shù)執(zhí)行環(huán)境
- 每次進(jìn)入一個(gè)新執(zhí)行環(huán)境,就會(huì)創(chuàng)建一個(gè)用于搜索變量和函數(shù)的作用域鏈
- 函數(shù)的局部環(huán)境不僅有權(quán)訪問(wèn)函數(shù)作用域中的變量,而且有權(quán)訪問(wèn)其父環(huán)境乃至全局環(huán)境
- 全局環(huán)境只能訪問(wèn)在全局環(huán)境中定義的變量和函數(shù),而不能直接訪問(wèn)局部環(huán)境中的任何數(shù)據(jù)
- 變量的執(zhí)行環(huán)境有助于確定應(yīng)該何時(shí)釋放內(nèi)存
小結(jié)之垃圾回收
- 離開(kāi)作用域的值將被自動(dòng)標(biāo)記為可以回收,因此將在垃圾收集期間被刪除(“標(biāo)記清除”算法)
- 解除變量的引用不僅有助于消除循環(huán)引用現(xiàn)象,對(duì)于垃圾回收也有好處。為了確保有效地回收內(nèi)存,應(yīng)該及時(shí)解除不再使用的全局對(duì)象、全局對(duì)象屬性以及循環(huán)引用變量的引用(讓對(duì)象=null,是讓垃圾回收時(shí)可以回收該對(duì)象)