zoukankan      html  css  js  c++  java
  • 通过作用域链解析js函数一些难以理解的的作用域问题

    基本原理

    js函数在执行时,系统会创建一个隐式的属性scope,scope中存储的是函数的作用域链.

    通过对这个scope的分析,就能解释JavaScript中许多难以理解的问题:

    例1:
    function demo(){} demo();

    scope属性是在函数执行时创建,如果这个函数是一个全局函数,他的scope里会保存一个Global object和一个activation object.

    global object保存的是全局的信息,而activition object保存的是函数内部的信息,比如函数中有哪些变量等

    例2:
         function demo(){
            function inner(){}
        }
        demo();

    如果这个函数是一个内部函数,他会继承父函的原型链,并在其顶端创建一个自己的activation.

    当函数执行完毕,该函数的原型链被销毁.

    为什么在函数外部不能调用函数的子函数

    如例2所示:

    当demo函数执行完毕后,该函数的原型链被销毁,在外部根本无从得知函数内部的信息.也就不能调用inner函数

    为什么子函数可以使用父级函数的变量

    因为子函数继承了父函数的原型链,他能够在原型链中通过父函数的activation object找到父函数定义的变量

  • 相关阅读:
    Something broke! (Error 500)——reviewboard
    linux内核--自旋锁的理解
    I.MX6 mkuserimg.sh hacking
    I.MX6 DNS 查看、修改方法
    I.MX6 android mkuserimg.sh
    I.MX6 AW-NB177NF wifi HAL 调试修改
    I.MX6 wpa_supplicant_8 编译问题
    I.MX6 MAC Address hacking
    I.MX6 MAC地址修改
    I.MX6 U-boot imxotp MAC address 写入
  • 原文地址:https://www.cnblogs.com/iszhangk/p/10994946.html
Copyright © 2011-2022 走看看