概念:代码执行的时候产生的环境。
分类:1,全局上下文(在页面打开的时候创建,关闭的时候结束),2,局部上下文(在函数调用的时候产生,调用结束的时候关闭),3,eval
执行上下文(不常用)。
与作用域的对比,EC是动态的执行。作用域:是静态的位置
ec:作用用来确定当前”变量““函数”“类”使用的是谁。
EC的执行周期:1,创建阶段:EC的创建的基础内容其中做了下面的事情(确定this的指向,根据调用情况;环境记录(variable object
) ;建立对外引用。)2,执行阶段:代码按顺序执行
环境记录(variable object
):第一步:看参数,第二部:看声明式函数,出现命名冲突覆盖;第三段:看VAR变量,出现命名冲突忽略,只看变量,不看值。
建立对外引用:指向函数声明处所处的环境。
作用域链:通过执行上下文的对外引用,可以一直向外连成一个链条,这个链条的起点就是当前函数,产生的执行上下文,链条的末尾永远是全局执行上下文,这个链条就是作用域链,作用是寻找变量。
函数对其状态即词法环境的共同构成闭包。
侠义闭包:当一个内部函数访问他所在的外部函数内部的自由变量的时候,并且这个内部函数外部引用就构成了下一个闭包。
闭包的条件:内部函数+外部函数的自由变量+内部函数的引用。
闭包优点:扩大变量的使用范围,延长变量的作用时间,减少命名空间污染。
缺点:浪费内存,导致内存泄漏。
作用:
共享变量。
做缓存
私有变量
模块化开发,防止命名空间污染
函数是一等公民,函数可以像其他函数类型一样,出入许多场地,函数可以作为参数,可以座位返回值,可以存变量保存,通过这些手段实现高阶函数。
概念:高阶函数就是对其他函数的操作的函数,比如函数作为参数,函数作为返回值。遍历().
柯里化函数:一般通过闭包来求值,通过一定操作他函数某些参数固定下来,得到一个接受剩余参数的函数就叫做curry。
柯里化函数
function curry(func,...args) {
return function (...inArgs) {
const allArgs = args.concat(inArgs);
if (allArgs.length <= func.length) {
return func(...allArgs);
} else {
return curry(func, ...allArgs);
}
}
}
防抖函数
通过延迟,防止代码高频率执行。
func
函数参数值。
waitTime
时间
防抖函数
function debounce(func, waitTime) {
let timerId;
return () => {
if (timeId) {
clearTimeout(timeId)
} setTimeout(() => {
func();
}, 1000);
}
原文:https://www.cnblogs.com/feng-lin/p/12453770.html