预编译,作用域,作用域链,栈和堆
摘要;全局预编译(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(作用域,作用域链)
解答过程
一条语句中声明的多个变量不可以同时赋同一个值:
例题三(作用域,作用域链)
解答过程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!