预编译,作用域,作用域链,栈和堆

摘要;全局预编译(window),局部预编译(fn-AO),作用域链(fn.scopes=[]),作用域,栈和堆

 

基础知识:

函数内部语法检查(局部预编译)

  1、产生AO对象

  2、函数预编译

    a、将var和形参提升为AO对象的属性,值为undefined,

    b、形参和实参对应,实参赋值给形参,对于没有赋值的形参值是undefined

    c、将function声明的函数提升为AO对象的属性,值为函数体

  3、执行非var非function的代码,

  4、函数调用结束AO对象销毁

语法检查(全局预编译)

产生window对象

全局预编译

  1、将var提升为window对象的属性,值为undefined;

  2、将function声明提升为window对象的属性,值为函数体

执行非var非function的代码

遇到函数的的调用

作用域链

作用域链总的来说就是就是代码在访问变量时的顺序,从本身开始向上依次访问

首先访问本身所在的作用域是否存在需要访问变量,如果没有就再继续向上访问

作用域

https://www.runoob.com/js/js-scope.html

栈和堆

引用类型宝尊在对内存中

引用数据类型的变量保存的并不是对象本身,而是指向该对象的引用地址(栈内存)

保存基本数据类型的变量保存的是值本身

例题1(栈和堆)

解题过程

 

 

 

例题2(作用域,作用域链)

 

解答过程

一条语句中声明的多个变量不可以同时赋同一个值:

 

 

 例题三(作用域,作用域链)

解答过程

 

posted @   老板吃不下了  阅读(24)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示