JavaScript高级程序设计(第4版)读书分享笔记记录
适用于刚入门前端的同志
执行上下文
变量或函数的上下文决定 了它们可以访问哪些数据,以及它们的行为。
在浏览器中,全局上下文就是我们常说的
window
对象(第
12
章会详细介绍),因此所有通过
var
定义的全局变量和函数都会成为 window
对象的属性和方法。
示例:
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
个上下文:
全局上下文、
changeColor()
的局部上下文和
swapColors()
的局部上下文。
- 内部上下文可以通过作用域链访问外部上下文中的一切,但外部上下文无法访问内部上下文中的任何东西。
- 每个上下文都可以到上一级上下文中去搜索变量和函数,但任何上下文都不能到下一级上下文中去搜索
变量声明
使用 var 的函数作用域声明
- 在使用 var 声明变量时,变量会被自动添加到最接近的上下文。
- var 声明会被拿到函数或全局作用域的顶部,位于作用域中所有代码之前——‘变量提升’
使用 let 的块级作用域声明
- ES6 新增的 let 关键字跟 var 很相似,但它的作用域是块级的,这也是 JavaScript 中的新概念
- 块级作用域由最近的一对包含花括号{}界定
-
if 块、 while 块、 function 块,甚至连单独 的块也是 let 声明变量的作用域
let 与 var 的另一个不同之处是在同一作用域内不能声明两次。重复的 var 声明会被忽略,而重复的 let 声明会抛出 SyntaxError 。