JS加密之JS基础大考验

之前不知道在哪看到的几个JS题目,感觉比较有趣,全是细节,没什么技巧。

之前的那个博主也写了他对题目的理解,我个人感觉还是一知半解,于是想按自己的理解再写一次。

感兴趣的朋友可以一起看一下,懂JS基础就可以看明白。

只抽了2个典型的例子,其他题目大同小异没啥特点

题目1

var x = 1;
function f(x, y = function () { x = 3; console.log(x); }) {
  console.log(x) // 1
  var x = 2 
  y() // 2
  console.log(x) // 3
}
f()
console.log(x) // 4

各位先复制代码自己去分析推理一遍,预想一下答案是什么,然后执行一遍看看是否符合自己的猜想。

然后继续分析为何会是这个结果。如果还是不解,再来看我的想法,应该会比较更深入的了解。

各位先努力分析一波,待会我揭晓我的看法····

执行顺序

1.x是参数,未赋值,所以是undefine。

var x = 2,重新申明x变量,将参数的x覆盖了。

2.执行y函数,打印y函数里的x

3.打印x,y函数修改的x = 3,修改的是y函数最近作用域的x,也就是参数x,而这里打印的是 var x = 2;申明的x,所以是2

4.最后打印x,也就是最外层的x,因为f函数内修改的都是局部作用域的x,所以外层x异常是初始值

题目2

var x = 1;
function f(xx, y = function () { x = 3; console.log(x); }) {
  console.log(x) // 1
  var x = 2
  y() // 2
  console.log(x) // 3
}
f()
console.log(x) // 4

这题依然大家先不要执行,自行在脑子里分析执行结果。

这题考的其实就是var提升,就是一些小细节问题。

执行顺序

1.第一个x是undefined,原因是f函数内有一个x的变量申明了,他会在作用域内提升到最前边申明。

f函数内部真正执行的时候成了这样

var x = 1;
function f(xx, y = function () { x = 3; console.log(x); }) {
  var x;
  console.log(x) // 1
  x = 2
  y() // 2
  console.log(x) // 3
}
f()
console.log(x) // 4

2.y函数内打印3

3.因为就近作用域原则,y函数内的x当前作用域没有,向外层找,找到的是最外层的x,修改的也是最外层的,所以这里输出的还是2

4.因为y函数给他改成3了 所以输出3

结语

JS加密技术必须要有扎实的js基础功,才能更好的利用这些知识去保护别人的JS,防止代码被不良份子侵害。

如果你感觉文章很有用,请点赞收藏。

如果感觉文章有不对的地方非常欢迎指出一起探讨纠正。

如果有需要联系我,可以在jsjiami.com底部有我联系方式

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值