理解执行上下文

执行上下文(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);

    }

猜你喜欢

转载自www.cnblogs.com/feng-lin/p/12453770.html
今日推荐