轉(zhuǎn)載:https://mp.weixin.qq.com/s/8c5Nm4k7cYvyR5MqluayFg
本文章適用于零基礎或入門的同學
JavaScript作用域、事件、this關鍵字、嚴格模式、錯誤類型
作用域
在 JavaScript 中, 作用域為可訪問變量,對象,函數(shù)的集合。分別有全局作用域、函數(shù)作用域和塊級作用域,函數(shù)作用域和塊級作用域又統(tǒng)稱為局部作用域。
全局作用域,可以理解為網(wǎng)頁的全部范圍
-
局部作用域
- 函數(shù)作用域,函數(shù)內(nèi)部,所以不同的函數(shù)內(nèi)可以聲明相同的變量
- 塊級作用域,if...else、for、forEach、while...
事件
HTML 事件是發(fā)生在 HTML 元素上的,JavaScript 可以觸發(fā)這些事件。事件可以是瀏覽器行為,也可以是用戶行為。
常見的HTML事件
- onchange:HTML 元素改變
- onclick:用戶點擊 HTML 元素
- onmouseover:鼠標指針移動到指定的元素上時發(fā)生
- onmouseout:用戶從一個 HTML 元素上移開鼠標時發(fā)生
- nkeydown:用戶按下鍵盤按鍵
- onload:瀏覽器已完成頁面的加載
事件可以用于處理表單驗證,用戶輸入,用戶行為及瀏覽器動作:
- 頁面加載時觸發(fā)事件
- 頁面關閉時觸發(fā)事件
- 用戶點擊按鈕執(zhí)行動作
- 驗證用戶輸入內(nèi)容的合法性
- ...
this關鍵字
面向?qū)ο笳Z言中 this 表示當前對象的一個引用。但在 JavaScript 中 this 不是固定不變的,它會隨著執(zhí)行環(huán)境的改變而改變。
- 在方法中,this 表示該方法所屬的對象
- 如果單獨使用,this 表示全局對象
- 在函數(shù)中,this 表示全局對象
- 在函數(shù)中,在嚴格模式下,this 是未定義的(undefined)
- 在事件中,this 表示接收事件的元素
- 類似 call() 和 apply() 方法可以將 this 引用到任何對象
變量提升和嚴格模式
變量提升
- 函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部
- 變量可以在使用后聲明,即變量可以先使用再聲明
- 只有聲明的變量會提升,初始化的不會
嚴格模式
嚴格模式(strict mode)即在嚴格的條件下運行。"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。它不是一條語句,但是是一個字面量表達式,在 JavaScript 舊版本中會被忽略。
- 為什么使用嚴格模式?
- 消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為
- 消除代碼運行的不安全之處,保證代碼運行的安全
- 提高編譯器效率,增加運行速度
- 為未來新版本的Javascript做好鋪墊
- 嚴格模式的限制
- 不允許使用未聲明的變量
- 不允許刪除變量或?qū)ο?/li>
- 不允許刪除函數(shù)
- 不允許變量重名
- 不允許使用八進制
- 不允許使用轉(zhuǎn)義字符
- 不允許對只讀屬性賦值
- 不允許對一個使用getter方法讀取的屬性進行賦值
- 不允許刪除一個不允許刪除的屬性
- 變量名不能使用 "eval" 字符串
- 變量名不能使用 "arguments" 字符串
- 由于一些安全原因,在作用域 eval() 創(chuàng)建的變量不能被調(diào)用
- 禁止this關鍵字指向全局對象
- 嚴格模式新增了一些保留關鍵字
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
錯誤類型
引擎執(zhí)行 JavaScript 代碼時,會發(fā)生各種錯誤??赡苁钦Z法錯誤,通常是程序員造成的編碼錯誤或錯別字??赡苁瞧磳戝e誤或語言中缺少的功能(可能由于瀏覽器差異)??赡苁怯捎趤碜苑掌骰蛴脩舻腻e誤輸出而導致的錯誤。當然,也可能是由于許多其他不可預知的因素。
- ReferenceError
- SyntaxError
- TypeError
捕獲語句
try {
... //異常的拋出
} catch(e) {
... //異常的捕獲與處理
} finally {
... //結(jié)束處理
}