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