let 与 var 的区别
不存在变量提升
let 不存在变量提升,var 会变量提升:
1 | console.log(a); //ReferenceError: a is not defined |
变量 b 用 var 声明存在变量提升,所以当脚本开始运行的时候,b 已经存在了,但是还没有赋值,所以会输出 undefined。
变量 a 用 let 声明不存在变量提升,在声明变量 a 之前,a 不存在,所以会报错。
函数
arguments
arguments 可以使函数传入任意数量参数,用来保存函数的实参
1 | function log() |
闭包
函数内部内部再定义一个函数
1 | function s(a,b) |
柯里化
1 | function addThreeNum(a) |
柯里化的好处,可以固定a,b的值,重复使用函数
箭头函数
箭头函数本质上是一种匿名函数,如果需要在后面调用,应该用一个常量保存
1 | const f = (a,b) => { |
如果函数体内部只有一个
return
语句那么可以省略大括号和return
如果函数体内部只有一个参数,也可以省略小括号
如果没有参数,小括号则不能省略
箭头函数没有arguments -> 它是一个类数组对象
- 使用
...args
剩余参数,和arguments作用一样(args可以自定义)
- 使用
箭头函数没有this,(没有自己的this),它的this总是全局作用域的this(window)
1 | const f = (a,b) => a + b; // 省略了return; |
自执行函数
1 | (function() |
回调函数
1 | function request(cb) |
内置函数
setTimeout( () => { console.log('hi');} , 500)
用于延后500毫秒
数组
forEach
forEach
用来遍历元素
1 | let arr = [1,2,3]; |
forEach
接收一个回调函数(在c语言中,回调函数就是传入一个函数的地址,相当于forEach传入一个匿名函数)
map
map用于遍历数组,并返回一个同等长度的新数组。
1 | let arr = [1,2,3]; |
filter
filter用于过滤数组,返回指定条件的元素。
1 | let arr = [1,2,3]; |
filter同样需要传入一个回调函数。
reduce
reduce(),用来整合数组。它可以对数组中的值进行计算,最终将数组中的所有元素合并为一个值。
1 | // Arrow function |
数组测试
1 | let arr = [1,2,3,4,5,6]; |
解构赋值
可以用
rest
把没有解构元素用数组的方式保存起来注意:这个rest名字不是必须的,只是比较有代表意义,可以用任意变量名
rest 用作函数
spread展开运算符(…)可以复制一个数组
...
表示取剩下的元素
1 | let [a,b] = [1,2,3]; |
用途:用于解构一个函数返回的数组
for…of
使用for…of循环也可以遍历一个数组
1 | let arr = [1,2,3]; |
对象
是JavaScript中最灵活的数据结构
1 | let obj = { |
是key: value 键值对的元素属性
中间的元素不需要写let var function等关键字
中间元素使用“,”隔开,最后一个不需要
访问对象,修改仍然可以使用键值对格式
对象也支持结构赋值,但结构中变量名字应与对象的属性名字一致
遍历对象
1 | for(let p in obj) |
遍历对象使用 for in 语句
类
实例属性与类属性
实例属性需要用变量引用
类属性可以直接用类名引用,方法是在函数/变量前加一个
static
1 | class MyClass{ |
模块化
Export(导出)
在创建JS模块时,我们通过export向模块外部暴露内容(函数、对象、原始值)。在其他模块中可以通过import引入这些内容。使用了export的模块会自动开启严格模式。
export导出的方式有两种:
默认导出(default)
命名导出
1 | // 导出变量(命名导出) |
Import(引入)
import用来引入其他模块中导出的内容,注意!只有通过export导出的内容才能够通过import引入。和export一样,使用了import的模块会自动启用严格模式。
异步
setTimeout & setInterval
这两个是系统提供的异步函数操作
setTImeout 在指定时间后执行一次;传入一个回调函数和时间,由于是异步的,不会阻断底下代码的执行
- clearTimeout中断执行
setInterval 每隔一段时间执行一次;传入一个回调函数和时间,由于是异步的,不会阻断底下代码的执行
- clearInterval中断执行
Promise
Promise是可以自定义的异步操作,把耗时的操作交给promise