学习目标
-
作用域和作用域链
-
箭头函数
-
闭包[面试]
作用域和作用域链[背]
1.什么是作用域?
标识符可以访问的范围.
2.标识符?
变量名/函数名/函数的形参/对象的属性
3.作用域分类
- 全局作用域–访问范围都可以
- 局部作用域–函数内部可以访问
- 块级作用域–es6的新增作用域 代码块内访问
4.作用域链-----就近原则
先找自己的,自己没有就一层层向上找,找到就使用,如果找到全局都没有,就报错
箭头函数
箭头函数是es6的语法糖
-
删除function,在()和{}之间添加一个=>
-
如果函数体只有一行代码的时候,可以省略return 和 {},建议前期不要省略
-
如果函数的形参只有一个时候,可以省略(),建议前期不要省略
函数的形参和实参
形参:函数定义的时候参数,占位置.命名遵守含义明确
实参:函数调用时候的参数.参与运算
arguments对象[ES5]—[了解]
是一个伪数组,不能使用数组的方法
箭头函数没有这个arguments对象
rest参数[ES6]
是数组,数组的所有方法都可以直接使用
箭头函数也可以使用
function 函数名称(...形参名称){
形参名称 就是所有参数的数组
}
IIFE:立即执行函数表达式[了解]
作用?:自动调用,保护变量,形成局部作用域.
;(function(形参1,形参2){
//代码体
})(参数1,参数2);
闭包[面试]
1.什么是闭包?
函数内部的标识符跨作用域.这个标识符和函数的总和称为闭包.
2.语法结构
//外部函数把内部函数返回去 外部函数只能调用一次
function 外部函数(){
let money=500
return function(){//内部函数
money-=100
}
}
//利用iife,外部函数把内函数挂载在window
(function(){
let money=500
window.函数名称=function(){
money-=100
}
})()
函数名称()
函数名称()
函数名称()
函数名称()
3.作用
保护变量,防止全局污染.
形成一个简单的模块化.
4.缺陷
大量使用闭包,会造成内存溢出.爆栈.消耗性能.
闭包能实现的,es6都能实现.
5.使用场景
防抖函数