美文网首页
学习JS笔记(第七章-闭包,作用域)

学习JS笔记(第七章-闭包,作用域)

作者: 这很重要吗 | 来源:发表于2017-05-03 12:38 被阅读0次

    闭包的概念##

    Paste_Image.png

    闭包实例##

    数据传递更加灵活###

    Paste_Image.png

    常见错误之循环闭包###

    Paste_Image.png

    封装变量###

    Paste_Image.png

    闭包小结##

    Paste_Image.png

    作用域##

    js有三种作用域:全局,函数,eval,js 没有块级作用域

    Paste_Image.png

    作用域链###

    new function()构造的函数访问不到当前函数内的变量

    Paste_Image.png

    利用函数中作用域封装###

    javascript可以用+()放在function前,为函数表达式写法,防止function前置形成函数声明,函数声明后加()会报语法错误

    Paste_Image.png

    ES3执行上下文##

    执行上下文,EC,栈结构,每一个函数都有自己的执行上下文EC(执行环境 execution context),并且每个执行上下文中都有它自己的变量对象VO(Variable object),用于存储执行上下文中的变量 、函数声明 、函数参数,这解释了js如何找到我们定义的函数和变量。

    Paste_Image.png

    变量对象VO###

    变量对象(Variable Object,简称VO),是一个抽象概念中的“对象”。
    它用于存储执行上下文中的变量、函数声明、函数参数。
    函数中还有一个概念——激活对象(AO),自带参数arguments

    Paste_Image.png

    执行上下文与变量对象###

    Paste_Image.png

    全局执行上下文(浏览器)###

    Paste_Image.png

    函数中的激活对象AO###

    对于函数而言,AO和VO是一个对象,函数AO分为两个阶段

    1. 变量初始化阶段
    2. 代码执行阶段

    函数变量初始化


    函数

    全局作用域下的初始化


    Paste_Image.png

    Vo(变量对象)-函数上下文对象,将按照如下顺序进行填充初始化:
    1.首先函数参数(若未传入,初始化该参数值为undefined)
    2.然后函数声明(若发生命名冲突,会直接覆盖)
    3.最后变量声明(初始化变量值为undefined,若发生命名冲突,会忽略。)

    实例:

    Paste_Image.png Paste_Image.png

    函数表达式不会影响VO,在vo中没有,所以不能前置函数表达式,_e是命名函数表达式的名字

    Paste_Image.png

    代码执行阶段

    代码

    实战###

    Paste_Image.png

    总结##

    不同情况下的this的值 构造器中的this

    函数属性

    函数是对象,所以它也有属性

    相关文章

      网友评论

          本文标题:学习JS笔记(第七章-闭包,作用域)

          本文链接:https://www.haomeiwen.com/subject/lsdktxtx.html