百度云網(wǎng)站建設(shè)教程視頻域名seo站長工具
JavaScript高級(jí)程序設(shè)計(jì)(第4版)讀書分享筆記記錄
適用于剛?cè)腴T前端的同志
?執(zhí)行上下文
變量或函數(shù)的上下文決定 了它們可以訪問哪些數(shù)據(jù),以及它們的行為。
在瀏覽器中,全局上下文就是我們常說的 window 對(duì)象(第 12 章會(huì)詳細(xì)介紹),因此所有通過 var 定義的全局變量和函數(shù)都會(huì)成為 window 對(duì)象的屬性和方法。
示例:
var color = "blue";
function changeColor() { let anotherColor = "red"; function swapColors() { let tempColor = anotherColor; anotherColor = color; color = tempColor; // 這里可以訪問 color、anotherColor 和 tempColor } // 這里可以訪問 color 和 anotherColor,但訪問不到 tempColor swapColors();
}
// 這里只能訪問 color
changeColor();
以上代碼涉及 3 個(gè)上下文:
全局上下文、changeColor()的局部上下文和 swapColors()的局部上下文。
?
- 內(nèi)部上下文可以通過作用域鏈訪問外部上下文中的一切,但外部上下文無法訪問內(nèi)部上下文中的任何東西。
- 每個(gè)上下文都可以到上一級(jí)上下文中去搜索變量和函數(shù),但任何上下文都不能到下一級(jí)上下文中去搜索
變量聲明
使用 var 的函數(shù)作用域聲明
- 在使用 var 聲明變量時(shí),變量會(huì)被自動(dòng)添加到最接近的上下文。
- var 聲明會(huì)被拿到函數(shù)或全局作用域的頂部,位于作用域中所有代碼之前——‘變量提升’
使用 let 的塊級(jí)作用域聲明
- ES6 新增的 let 關(guān)鍵字跟 var 很相似,但它的作用域是塊級(jí)的,這也是 JavaScript 中的新概念
- 塊級(jí)作用域由最近的一對(duì)包含花括號(hào){}界定
- if 塊、while 塊、function 塊,甚至連單獨(dú) 的塊也是 let 聲明變量的作用域
let 與 var 的另一個(gè)不同之處是在同一作用域內(nèi)不能聲明兩次。重復(fù)的 var 聲明會(huì)被忽略,而重復(fù)的 let 聲明會(huì)拋出 SyntaxError。