之前不知道在哪里看到了几篇JS题目,感觉比较有意思,满满的细节,没什么技巧。之前的博主也写了自己对题目的理解,但是个人感觉还是不太懂,所以想按照自己的理解重新写一遍。有兴趣的朋友可以一起看看,了解了JS的基础就可以理解了。只取了2个典型例子,其他题目大同小异。主题1varx=1;functionf(x,y=function(){x=3;console.log(x);}){console.log(x)//1varx=2y()//2console.log(x)//3}f()console.log(x)//4大家先复制代码自己分析推理,想象一下答案是什么,然后执行看是否符合你的猜测。然后继续分析为什么是这个结果。如果还不明白,再看看我的思路,应该会有更深刻的理解。大家先试着分析一下wave,稍后再表露我的看法……Executionorder1.x是一个参数,没有被赋值,所以是undefine。varx=2,重新声明x变量并覆盖参数x。2、执行y函数,在y函数中打印x3。打印x,y函数的修改后的x=3,修改后的是y函数最近作用域的x,也就是参数x,这里打印的是varx=2;声明的x,所以是24。最后打印x,也就是最外层的x,因为f函数在局部作用域修改了x,所以外层的x异常是初始值Title2varx=1;functionf(xx,y=function(){x=3;console.log(x);}){console.log(x)//1varx=2y()//2控制台。log(x)//3}f()console.log(x)//4这道题还没有执行,脑子里分析一下执行结果。这道题其实是关于var提升的,只是一些小细节。执行顺序1.第一个x是undefined,因为f函数中声明了一个x的变量,它会被提升到scope中最前面的声明。f函数真正执行的时候就变成了这样varx=1;functionf(xx,y=function(){x=3;console.log(x);}){varx;console.log(x)//1x=2y()//2console.log(x)//3}f()console.log(x)//42.在y函数中打印33.由于最近作用域原则,y函数x的当前作用域不存在,寻找外层,找到最外层x,修改最外层,所以这里输出还是24。因为y函数变了itto3,output3结束语JS加密技术必须要有扎实的js基本功,才能更好的利用这些知识来保护别人的JS,防止代码被不法分子侵犯。如果您觉得文章有用,请喜欢并收藏它。如果您觉得文章有不对的地方,非常欢迎您指出,共同讨论、指正。如果需要联系我,可以在jsjiami.com底部找到我的联系方式
