当前位置:首页 > javascript > 正文内容

js预编译输出题-解题思路

自由小鸟1年前 (2023-11-01)javascript896
function fn(a,c){
    console.log(a) 
    var a=123
    console.log(a)
    console.log(c)
    function a(){}
    if(false){
       var d=678 
    }
    console.log(d)
    console.log(b)
    var b=function(){}
    console.log(b)
    function c(){}
    console.log(c)
}
fn(1,2)

做这种题可以按这个步骤画出来
编译阶段:
编译时候需要做了哪些事情

1,创建ao对象
2, 找形参和变量的声明,作为ao对象的属性名,值为undefined
3, 实参和形参相统一,就是看是否有传进来参数
找到函数声明,会覆盖变量的声明

编译结束后开始解释逐行执行阶段,从上往下一行行开始
那以上面的步骤套用一下下面的题试试
第一步和第二步一起做
js复制代码ao:{
a:undefined
c:undefined
d:undefined
b:undefined
}

第三步实参和形参相统一
js复制代码ao:{
a:1
c:2
d:undefined
b:undefined
}

第四步 找到函数声明,会覆盖变量的声明
js复制代码ao:{
a:function a(){}
c:function c(){}
d:undefined
b:undefined
}

js复制代码开始代码一行行的执行
function fn(a,c){
console.log(a) //function a(){}
var a=123
console.log(a) //123
console.log(c) //function c(){}
function a(){}
if(false){
var d=678
}
console.log(d) //undefined
console.log(b) //undefined
var b=function(){}
console.log(b) //function (){}
function c(){}
console.log(c) //function c(){}
}
fn(1,2)

自己在掘金上的文章
作者:前端_小卢
链接:https://juejin.cn/post/7264232104800780348
来源:稀土掘金

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://webge.net/?id=183

返回列表

上一篇:数据各种去重复,合并方法

没有最新的文章了...

“js预编译输出题-解题思路” 的相关文章

正则的规则

正则的两个特点:懒惰:如果没有设置全局g的情况下,只匹配1次,这时候的lastIndex的值是0贪婪:...

最全的js运行机制

最全的js运行机制

主线程Event Queue:(微任务,宏任务) 1,主线程执行完后2,到Event Queue里找,先执行微任务,再宏任务...

js 深浅拷贝

对象浅拷贝Object.assign,也可以做到浅拷 slice let obj=[11,22,33,44,['aa','bb','cc']] let aaa=obj.slice(0); aaa[4][0]='ccc' c...

防抖和节流

如果我在一个时间内只执行一次,最好用防抖,如果只是想在执行时,设置一下间隔时间那么用节流 防抖是在一个时间内只能执行一次,如果频繁操作就会清除重新开始计算执行,我设置的时间内整个过程中只会执行一次/* 函数的防抖 debounce,不是某个事件触发就去执行函数,而是在指定的时间间隔内执行...

IOS软键盘收起留白问题及Input光标过长问题

1.Input光标过长问题iso 中input 光标长度与line-height有关,input本身字体就是上下居中的因此不需要设置,但如果想控制光标的长度可以通过设置line-height高度来控制; 2.IOS软键盘收起留白 1.可以通过输入框失去焦点 <div class=&quo...

数据各种去重复,合并方法

1,数组对象去重通过id function reduce(arr) { var obj = {}; arr = arr.reduce(function (item, next) { obj[next.id] ? "" : (obj[next.id] = t...