JavaScript高級(jí)程序設(shè)計(jì)讀書筆記

JavaScript簡介

  • JavaScript歷史
    客戶端完成表單驗(yàn)證

  • JavaScript是什么
    ECMAScript + DOM + BOM

    • ECMAScript
      • 由ECMA-262定義,提供核心語言功能
    • DOM(document object model 文檔對(duì)象模型)
      • 提供訪問和操作網(wǎng)頁內(nèi)容的方法和接口
      • 針對(duì)XML但經(jīng)過擴(kuò)展用于HTML的應(yīng)用程序編程接口(API),可以把整個(gè)頁面映射為一個(gè)多層節(jié)點(diǎn)結(jié)構(gòu)。
      • 開發(fā)人員無需重新加載網(wǎng)頁,就可以修改其外觀和內(nèi)容。
      • DOM1級(jí):映射文檔借口
      • DOM2級(jí):views視圖 events事件 style樣式 traversal and range遍歷和范圍
    • BOM(browswe object model 瀏覽器模型對(duì)象)
      • 提供與瀏覽器交互的方法和接口
  • JavaScript與ECMAScript的關(guān)系

    • web瀏覽器只是ECMAScript實(shí)現(xiàn)可能的宿主環(huán)境之一,兩者無依賴關(guān)系。宿主環(huán)境提供ECMAScript的實(shí)現(xiàn)和擴(kuò)展,如JavaScript。
  • JavaScript的不同版本

在HTML中使用JavaScript

  • <script>元素
    • 使用方式
      直接在頁面中嵌入或者包含外部文件。
      只要不存在defer和async,瀏覽器都會(huì)按照<script>元素在頁面中出現(xiàn)的先后順序?qū)λ鼈円来芜M(jìn)行解析。
    • 標(biāo)簽位置
      • 傳統(tǒng)做法:放置<head>中,意味著必須等到全部JavaScript代碼都被下載解析和執(zhí)行完成之后才開始呈現(xiàn)內(nèi)容,有可能會(huì)導(dǎo)致延遲。
      • 現(xiàn)代web應(yīng)用程序一般都會(huì)把全部JavaScript引用放在<body>元素中頁面內(nèi)容的后面,這樣顯示空白頁面的時(shí)間會(huì)縮短。
    • 6個(gè)屬性:
屬性 作用
async 立即下載腳本(只對(duì)外部腳本有效)異步執(zhí)行
charset 字符集(大多數(shù)瀏覽器會(huì)忽略)
defer 延遲到文檔完全被解析和顯示之后執(zhí)行(只對(duì)外部腳本有效)
src 包含要執(zhí)行代碼的外部條件
language 已廢棄
type 腳本語言類型,默認(rèn)為text/javascript
  • 嵌入代碼與外部文件
    • 外部條件的優(yōu)點(diǎn)
      • 可維護(hù)性:HTML和JavaScript代碼分離,結(jié)構(gòu)和邏輯行為分離
      • 可緩存:文件只需下載一次
      • 適應(yīng)未來

變量、作用域和內(nèi)存問題

基本類型

  • Undefined
  • Null
  • Number
  • Boolean
  • String

注意

  • 不能給基本類型添加屬性
  • 函數(shù)參數(shù)按值傳遞(見以下例子)
function setName(obj) {
  obj.name = "Nicholas";
  obj = new Object();
  obj.name = "Greg";
}

var person = new Object();
setName(person);
alert(person.name); // "Nicholas"

上述例子中,創(chuàng)建了一個(gè)對(duì)象,并將其保存在變量 person 中。然后,這個(gè)變量被傳遞到 setName() 函數(shù)中之后就復(fù)制給了 obj (注意不是引用)

在這個(gè)函數(shù)內(nèi)部,obj 和 person 引用的是同一個(gè)對(duì)象(即使是按值傳遞)。

然而當(dāng)函數(shù)內(nèi)部 重寫 obj 時(shí),這個(gè)變量引用的就是一個(gè)局部對(duì)象了。而這個(gè)局部對(duì)象會(huì)在函數(shù)執(zhí)行完畢后立刻被銷毀。

檢測(cè)類型

  • typeof 檢測(cè)基本類型
  • instanceof 檢測(cè)引用類型

執(zhí)行環(huán)境及作用域

  • 執(zhí)行環(huán)境僅分為全局和局部(函數(shù))
  • JavaScript 沒有塊級(jí)作用域

垃圾回收

JavaScript 是一門具有自動(dòng)垃圾收集機(jī)制的編程語言,因而我們不必關(guān)心內(nèi)存分配和回收問題。

目前主流的垃圾收集算法是“標(biāo)記清除”。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容