1.作用域
1.全局作用域
1.脚本中通用
2.顶级对象
window
1.浏览器默认提供的对象类型,其中存储系统级的API代码
2.全局污染,如果把自定义变量存储在window对象里,就属于污染
- 方案一 ———在局部作用域 ,匿名函数自调用形成的作用域中声明变量
- 方案二 ———ES6中退出let/const这两种鑫的声明变量的方案,带来新的顶级对象,带来新的顶级对象,脚本对象:用于存储自定义对象
3.宿主环境
JS代码运行是所在的平台
- Node.js
- 浏览器
2.局部作用域
1.函数调用时诞生的作用域
2.作用域链
当前作用域中使用一个变量时,如果自身没有,则到上层作用域中查找
3.闭包losure
1.函数在声明时,会检查自身使用的到变量从何而来,如果来自外部作用域,会自动把这个外部作用域保存在自身的csopes属性里,防止其释放
2. 闭包,被保存到scopes中的函数作用域成为闭包,可以认为是对于这种状态的描述
3. 闭包的问题,占据更多的内存,以为保存了而不再自动释放
4.
使用场景: 私有属性 var 函数名 = (function(){ var _私有属性 = 值 return function(){ 使用私有属性 } })()
ES6中提供了块级作用域, 利用块级作用域可以更容易的实现私有属性 { let _私有属性= 值 const _私有属性 = 值 function(){ 使用 私有属性 } }
2. 块级作用域
ES6中新增的作用域和函数的局部作用域类似,由let/const搭配 { } 而来
目的是代替匿名函数自调用产生的局部作用域做法:因为块级的实现方式更简单
3.模块
Node.js中
2.函数
1.arguments
- 保存接受到的所有实参
- 属于类数组类型,属性结构和数组对象相同,但是原型不是数组
- 遍历方案:使用for ··of或利用Object.setPrototypeOf修改器原型为数组
- 应用:
参数数量不固定的函数
函数重载:根据实参的个数或类型不同,执行不同的逻辑操作
2.this
- function场景
--对象.函数():对象
--函数():window;严格模式下是undefined
--new函数():示例对象
- 箭头函数:没有this,按照作用连原则 到上层查找使用
3. 触发函数的3种方式
- call:临时修改函数中的this指向,并执行
- apply:把数组改为参数列表形式,触发函数
- bind:把参数和对象与函数绑定在一起,返回新的函数,简化后续的调用
2.构造函数
1.用于创建对象的函数
2.new辅助构造函数使用
隐式完成3行代码 - this = {} - this.__proto__ = 构造函数.prototype - return this
3.原型
- 解决问题:节省内存,提升性能
- 做法:把公共的方法存储在构造哈数的prototype中,实现共享
- 原型链机制:当读取对象属性时,如果对象自身没有,则其到__proto__中查找使用
- 对象__proto__==构造函数.prototype孩子.父亲==母亲.丈夫
4.class语法
- ES6退出的,模仿Java的语法
class 类名{ constructor(){ } 方法名(){} }
3.ES5
2009年推出的JS第五个版本
- 新增严格模式
- 使用‘use strict’开启
- 提供更多的报错提示,强制程序员书写健康的代码
4.ES6
1.2015年推出的JS第六个版本
此版本属于里程碑角色的版本,引入大量的易用新特性,通常统称2015年之后推出的所有新特性ES6+
2.let/const
- 新增的声明变量的方案
- 带来新的顶级全局对象 ——脚本对象,存储自定义全局对象,避免全局污染
- 跨级作用域
- const:常量,声明时必须赋值,后续不可修改,更加安全可靠
- 声明提升:有提升 但存在暂存区设定,在声明行代码执行前不可修改
3.模板字符串
用反引号声明`` 支持换行 更好的字符串拼接方案:${}
4.箭头函数
- 更简单的匿名函数写法,带有语法糖
- 语法糖:
——形参只有一个,省略()
——方法体仅有一行,省略{return}
- this
5.数组遍历
for··of:适合数组和类数组,比如arguments
6.展开语法
...可以把数组/对象中的值抽取出来
在搭配函数使用时,待敌之前apply方法的作用
7.剩余参数rest
...形参
形参将会是数组类型,接受没有形参的所有传入的实参
8.展开语法
- 数组的展开语法 var[变量,变量,变量]=数组
- 对象的展开语法 var{属性名,属性名:别名}=对象
5.数组高阶函数
- every:每一个元素都满足条件
- some:至少一个元素满足条件
- filter:把满足条件的元素过滤出来
- map:映射,把元素处理后的值 组合成新的数组
- forEach:数组具有的遍历语法
- reduce:合并