JavaScript基礎(三)

轉(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事件

  1. onchange:HTML 元素改變
  2. onclick:用戶點擊 HTML 元素
  3. onmouseover:鼠標指針移動到指定的元素上時發(fā)生
  4. onmouseout:用戶從一個 HTML 元素上移開鼠標時發(fā)生
  5. nkeydown:用戶按下鍵盤按鍵
  6. onload:瀏覽器已完成頁面的加載

事件可以用于處理表單驗證,用戶輸入,用戶行為及瀏覽器動作:

  1. 頁面加載時觸發(fā)事件
  2. 頁面關閉時觸發(fā)事件
  3. 用戶點擊按鈕執(zhí)行動作
  4. 驗證用戶輸入內(nèi)容的合法性
  5. ...

this關鍵字

面向?qū)ο笳Z言中 this 表示當前對象的一個引用。但在 JavaScript 中 this 不是固定不變的,它會隨著執(zhí)行環(huán)境的改變而改變。

  1. 在方法中,this 表示該方法所屬的對象
  2. 如果單獨使用,this 表示全局對象
  3. 在函數(shù)中,this 表示全局對象
  4. 在函數(shù)中,在嚴格模式下,this 是未定義的(undefined)
  5. 在事件中,this 表示接收事件的元素
  6. 類似 call() 和 apply() 方法可以將 this 引用到任何對象

變量提升和嚴格模式

變量提升

  1. 函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部
  2. 變量可以在使用后聲明,即變量可以先使用再聲明
  3. 只有聲明的變量會提升,初始化的不會

嚴格模式

嚴格模式(strict mode)即在嚴格的條件下運行。"use strict" 指令在 JavaScript 1.8.5 (ECMAScript5) 中新增。它不是一條語句,但是是一個字面量表達式,在 JavaScript 舊版本中會被忽略。

  • 為什么使用嚴格模式?
  1. 消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為
  2. 消除代碼運行的不安全之處,保證代碼運行的安全
  3. 提高編譯器效率,增加運行速度
  4. 為未來新版本的Javascript做好鋪墊
  • 嚴格模式的限制
  1. 不允許使用未聲明的變量
  2. 不允許刪除變量或?qū)ο?/li>
  3. 不允許刪除函數(shù)
  4. 不允許變量重名
  5. 不允許使用八進制
  6. 不允許使用轉(zhuǎn)義字符
  7. 不允許對只讀屬性賦值
  8. 不允許對一個使用getter方法讀取的屬性進行賦值
  9. 不允許刪除一個不允許刪除的屬性
  10. 變量名不能使用 "eval" 字符串
  11. 變量名不能使用 "arguments" 字符串
  12. 由于一些安全原因,在作用域 eval() 創(chuàng)建的變量不能被調(diào)用
  13. 禁止this關鍵字指向全局對象
  • 嚴格模式新增了一些保留關鍵字
    • implements
    • interface
    • let
    • package
    • private
    • protected
    • public
    • static
    • yield

錯誤類型

引擎執(zhí)行 JavaScript 代碼時,會發(fā)生各種錯誤??赡苁钦Z法錯誤,通常是程序員造成的編碼錯誤或錯別字??赡苁瞧磳戝e誤或語言中缺少的功能(可能由于瀏覽器差異)??赡苁怯捎趤碜苑掌骰蛴脩舻腻e誤輸出而導致的錯誤。當然,也可能是由于許多其他不可預知的因素。

  • ReferenceError
  • SyntaxError
  • TypeError

捕獲語句

try { 
  ... //異常的拋出 
} catch(e) { 
  ... //異常的捕獲與處理 
} finally { 
  ... //結(jié)束處理 
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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