JS核心-part4

(1). 作用域(scope):
a. 什么是: 一个变量的可用范围
b. 为什么: 避免不同范围之间的变量互相干扰。

c. js中包括: 2级:

1). 全局作用域:
i. 什么是: 在程序的任何位置都能访问都的范围
ii. 保存着: 全局变量——任何位置都能访问
iii. 包括: 一切不属于任何函数和对象的变量和函数

2). 函数作用域:
i. 什么是: 函数{}范围内才能访问的区域
ii. 保存着: 局部变量——函数{}范围内才能访问
iii. 强调: 只有函数的{},才能形成作用域!
只要不是函数的{},都不是作用域
iv. 局部变量包括2种情况:
①在函数内var创建的变量
②函数的形参变量默认就是局部变量(虽然没有var)

(3). 作用域的原理: 4个阶段
a. 定义函数时:
每个函数对象身上都有一个"好友列表"
普通函数的好友列表只有两个格子。
离自己近的格子,暂时为空,预留
离自己远的格子,保存window对象的引用关系。

b. 调用函数时:做菜三部曲
第一步——备料
1). 临时创建函数作用域对象,并将函数作用域对象的地址,保存到好友列表中离函数近的格子里。
2). 在函数作用域对象中临时添加函数的局部变量
第二步——按菜谱做菜
1). 每用到一个变量,js引擎都会先在离自己近的函数作用域对象中查找使用。如果函数作用域对象中找到了想要的变量,则不再去全局找
2). 如果函数作用域对象中没有找到想用的变量,js引擎就会延好友列表继续去全局查找变量使用。
3). 总结: 变量的使用遵循就近原则
d. 函数调用后: 第三步——收拾
清空好友列表中离函数近的格子
导致临时函数作用域对象释放
导致所有局部变量一同释放!
——所以局部变量在函数调用后都不可用!

 

posted @ 2021-08-16 13:32  cansliang  阅读(39)  评论(0)    收藏  举报