Reader Comments

Python123

by Jan Vallecillo (2020-09-19)


a = 3; // 因为f是引用方式传参即f函数内部对参数a的修改就是对原数组a的修改 a = ; // 这里仅仅是把引用参数变量a指向新数组并不会覆盖原数组a 2020年前端面试复习必读精选文章【赠复习导图】 axuebin/articles#39 > > 有个疑问思考题里的这个 return f(); 算不算是尾调用呢
函数执行此时函数内部的形参 a 的值为 #010101指向堆内存中存储的数组 a = 3 // 向堆内存中存储的数组添加新值
@t2krew 哈哈~ 研究的时候这种精神是十分有必要的~ o(▽) @mqyqingfeng 博主 作用域和执行上下文是两个概念方便记忆应该如何如何理解区分呢 作用域基于函数执行上下文基于对象 上面说了当执行一段代码的时候会进行一个"准备工作"比如第一个例子中的变量提升和第二个例子中的函数提升 同时又说了当执行到一个函数的时候就会进行准备工作这里的"准备工作"让我们用个更专业一点的说法就叫做"执行上下文"
那么所说的是指由于JS是一段一段执行执行上下文就是我们所理解的"段" 建议将第一句话更为"当执行一段代码时会进行一个‘准备工作’这个工作不仅包含了预编译阶段的‘变量提升、函数提升’等还包含了执行阶段~" 这段代码为什么会是这个执行结果? 我对这个出栈的结果有疑问因为 f 函数引用了 checkscope 函数的 scope 变量所以我不认为 checkscope 先出栈 我是这么理解的checkscope的变量对象并没有被销毁
" 这里关于应变量提升的概念mdn更准确的描述是在"编译阶段被放入内存"所以更加准确的描述是不是应该为"编译"而不是"执行" 文中开篇举的例子貌似跟上下文栈关系不大倒是跟变量对象关系挺大的 因为变量对象中涉及了变量声明提升和函数声明提升的原理 函数依次从栈帧弹出才是执行上下文(ECStack 中里面的数据弹出)
> > 文中"当遇到一个函数代码的时候就会创建一个执行上下文" 这样说的话,是不是可以理解为可执行代码那里的三个分类应该是这样的?
如果是的话checkscope 应该会被先弹出执行上下文栈吧 最后的这两道思考题其实是闭包的用法在一个函数内部定义的函数会将它的包含函数的活动对象添加到它的作用域链中 博主的深入系列非常好但是不适合新手阅读新手还是建议读一读高程3 首先Array 是引用类型数组是存储在堆内存中的 var a = , // 变量 a 引用了 , 其值可以看作 在堆内存中保存的地址假设为 #010101
全局的可执行代码(表达式,赋值语句等) 我的理解是执行上下文是对应声明时的而执行上下文栈是对应调用时 文中: "当执行一段代码的时候会进行一个'准备工作'比如第一个例子中的变量提升和第二个例子中的函a href="http://www.ajaxtime.com/?s=%B0%E6%8F%90%E5%8D%87">提升
你可以看一下这个, 云末加速器 - ios.getlandeng9.org 就是上下文对象里有作用域链里面包含所有父级变量所以 f 函数的执行上下文也包含了 checkscope 里面的变量 不知道我这样理解对不对. 深入js——执行上下文栈 yh /Blog#4