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. 函数调用后: 第三步——收拾
清空好友列表中离函数近的格子
导致临时函数作用域对象释放
导致所有局部变量一同释放!
——所以局部变量在函数调用后都不可用!
原文地址:https://www.cnblogs.com/cansliang/p/15147380.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法