先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
正文
接下来看一段代码
var obj = {
show : function(){
console.log(this);
}
}
obj.show();
结果很容易预测,打印obj对象本身
在JS中,this属于一个关键字,也就是可以理解为,它是一个系统自带命令
通常,我们把它的含义解释为:当前对象
那么问题来了: 当前对象到底是指谁呢?
在上面的代码案例中,this代表的就是obj这个对象
接下来我们再看一段代码
function show(){
console.log(this);
}
show();
结果打印window对象
如果你对这个打印结果感到奇怪,那么可能你忽略了一个常识问题
window对象是可以省略不写的!
所以,上面的代码,实际上等价于:
function show(){
console.log(this);
}
window.show();
我再举一个常见的例子,关于事件绑定
btn.onclick = function(){
console.log(this);
}
btn.onclick(); //手动调用函数
//除手动调用外,鼠标单击按钮也可以触发函数执行
最终,无论是手动调用,还是单击按钮调用
打印结果都是btn对象
我们似乎总结出了一个this指向的规律
this总是指向,调用该函数的对象
如果你的代码结构是这样的
对象.函数();
那么,函数里的this,必然指向这个对象本身!
假设这个结论是成立的, 我们不妨来验证一下我们的猜想!!
function show(){
console.log(this);
}
window.show(); //打印window对象
var obj1 = {};
obj1.show1 = show;
obj1.show1(); //打印obj1对象
var obj2 = {};
obj2.show2 = obj1.show1;
obj2.show2(); //打印obj2对象
从上面代码的例子中,可以看出来
**window
对象和obj1
对象和obj2
**对象,共享了一个函数 show
window.show == obj1.show1; //true
window.show == obj2.show2; //true
三个对象,用了同一个函数
但打印出的this是各不相同的
window.show(); 打印出window对象
obj1.show1(); 打印出obj1对象
obj2.show2(); 打印出obj2对象
这似乎再一次印证了,我们刚才的猜想:
函数由哪个对象调用,this就指向哪个对象
科学是严谨的,得出结论之前,我们还是要反复验证
再看一个例子:
btn.onclick = function(){
setTimeout(function(){
console.log(this);
},0)
}
btn.onclick();
实际上,我只是在原来代码的基础上,增加了一个延迟器,并且时间设为0
那么打印出的this会不会有变化呢??
你可以先思考一番
通常按照直觉,我们会认为,延迟器只是延缓了执行时间,打印结果依然还是btn对象,没有变化
但经过测试发现,实际的打印结果,是 window
对象
是我们刚才的猜想错了吗?
要解释这个现象,我们得重新来观察这段代码
btn.onclick = function(){ //<----这个函数,用A来表示
setTimeout(function(){ //<----这个函数,用B来表示
console.log(this);
},0)
}
btn.onclick();
注意代码当中出现了两个函数,我们分别起名字叫做函数A和函数B
按照我们刚才的猜想: 函数由哪个对象调用,this就指向哪个对象
所以,this指向会依赖它所在的函数
而这个函数,到底是 函数**A
还是函数B
**呢?
其实你不难从代码中看的出来, this很明显是在函数**B
**中的
所以, 结果没有打印出 btn, 现在我们也不感到奇怪了
因为, this已经不再函数 **A
的内部了,而是函数B
**的内部
你可能还要问,为什么函数**B
**里的 this指向window呢?
这里其实算是一个特例,传入定时器的函数,由哪个对象调用,我们不得而知
这种情况,this就指向window
你暂时记住这个规律就好了,等你学完了作用域链,你就会明白其中的本质
回到我们开头的新闻
假设日记就是嫌疑人写的。 但日记里全是第三人称。那么 『 他 』到底是谁就很难说了
反过来如果日记里用的都是第一人称写的。 那么 『 我 』肯定指的是嫌疑人自己
JS函数当中的this关键字, 就相当于我们说话中的第一人称代词我
例如这样一个例子:
A对B说:“我要杀了你!”
这里的『我』指代A, 『你』指代B
B对A说:”我要弄死你!”
这里的『我』指代B, 『你』指代A
所以你看,同样的一个字,它可以指代任何人,关键看从谁的嘴里说出来
function fn(){
//this, 就相当于中文里的我
//不要上来就问this会指向谁
//我们必须搞清楚上下文环境,fn是谁调用的?(相当于这句话从谁的嘴里说出来)
//如果我们不能弄清楚这个问题,讨论this指向就没有意义
console.log(this);
}
到目前为止,我们差不多可以得出结论了
下面用几个练习最终验证一下
var obj = {
show: function(){
console.log(this);
}
}
上面的代码,最终打印obj对象
无论经过多少曲折,我们最终只看一个结论,那就是:
this所在的函数,由哪个对象调用?
我把代码进一步改造
function fn(){
console.log(this);
}
var obj = {
show: fn
}
btn.onclick = function(){
window.setTimeout(function(){
obj.show();
}, 100);
}
上面的代码,最终打印还是obj对象
当然了,也总会有一些例外情况, 比如下面这个:
function m1(){
function m2(){
console.log(this);
}
m2();
}
m1();
我们不禁要问,函数m2是由哪个对象调用的?
我们想尽了各种可能,最终发现都是错的。
我们始终不知道这个m2由哪个对象调用,好像它就那样执行了
而实际的打印结果呢?
不出意外,还是window对象
最后的结论
1. 所有的this关键字,在函数运行时,才能确定它的指向
2. this所在的函数由哪个对象调用,this就会指向谁
一、网安学习成长路线图
网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、网络安全面试题
最后就是大家最关心的网络安全面试题板块
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
络安全面试题
最后就是大家最关心的网络安全面试题板块
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-S5VzKTEI-1713586465453)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!