摘要:写这篇文章之前是看了这篇文章讲关于箭头函数中指向的问题,于是借此把相关的函数,构造函数,,,箭头函数的一些概念结合自己的理解又理了一遍,想着好好复习一下,最后有了写这篇文章的想法。这个上下文栈就是执行程序的基础。
写这篇文章之前是看了这篇文章讲关于箭头函数中this指向的问题,于是借此把相关的函数,构造函数,new,this,箭头函数的一些概念结合自己的理解又理了一遍,想着好好复习一下,最后有了写这篇文章的想法。我不太喜欢说一些太专业的话(自己菜,没法专业),所以都是自己理解以及自己总结最后得出的结论,首先看下下面这四个控制台的输出结果:
1. var a = 11 function test () { this.a = 22 let b = function () { consolve.log(this.a) } b() } var x = new test() => 11 x.a => 22 2. var a = 11 function test () { this.a = 22 let b = function () { consolve.log(this.a) } b() } var x = test() => 22 x.a => Uncaught TypeError: Cannot read property "a" of undefined 3. var a = 11 function test () { this.a = 22 let b = () => { consolve.log(this.a) } b() } var x = new test() => 22 x.a => 22 4. var a = 11 function test () { this.a = 22 let b = () => { consolve.log(a) } b() } var x = new test() => 11 x.a => 22
如果你耐心得看完了这四段,并且你所想的结果就是控制台的结果,那接下去你就可以不用看了,因为我要讲的你应该都懂,不过如果你有某段不明白,或者大部分不清楚,那下面的内容还是很值得看看并且理解理解的,毕竟这些真的蛮重要。
首先提几个概念:执行上下文(执行环境):当JavaScript代码执行的时候,会进入不同的执行上下文,这些执行上下文会构成了一个执行上下文栈(Execution context stack,ECS)。这个上下文栈就是js执行程序的基础。
this: 它是动态的,有人称它为动态上下文,我觉得不太对,this指向一个环境对象(代表这个执行环境),这是一个对象,而且是一个普通对象,而不是指向一个执行环境。
以下是我自己结合上面的内容的总结:函数(function): 函数它自己就是一个对象,它用来装一些等着执行的代码,像层壳一样,你不用它,它里面的代码是不会执行的,它身上绑着this(所以函数有自己的执行环境)。
new : 用到new说明有函数被当作构造函数来调用了。new会返回一个对象,像这里var x = new test()的变量x就指向这个返回出来的对象,new在返回对象之前会把函数壳里面的代码拿出来执行一遍,但是,此时壳被剥去了,构造函数里面的函数执行环境自然就变了,就像这里的:
let b = () => { consolve.log(this.a) } b()
自然b()暴露给了这会儿在外面的执行环境(控制台的话是window),但是构造函数会将自己的this给它创建出来的对象(也可以说给出的this成了这个对象),于是this.a = 22,a这个属性被挂到了新建的对象上。
最后专业点的话可以这样模拟一下new做的一系列操作(这样就扯到原型链继承的东西了这里暂时不需要管):
new Animal("cat") = { var obj = {}; // 新建一个对象 obj.__proto__ = Animal.prototype; // 实现原型链 var result = Animal.call(obj,"cat"); // 用call给this return typeof result === "object"? result : obj; }
箭头函数:这个es6出来的,现在运用广泛的东西跟函数有点不太一样,我这里只讨论一点,就是它自己身上根本没绑着this。所以在它里面调用this需要往父级去找,也就是它的this是继承自父执行环境的,而不是像有些人对其的解释,它的this一开始就固定了。也正是因为它没有this,所以也就不能用作构造函数,也就没法new。虽然最后结果是对的,但解释不太对。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/88824.html
摘要:转行前端有哪些疑虑在人生的抉择处,寻求一些别人的经验和总结,无可厚非,但是决定了就一定要坚定的走下去,谨慎是为了更好的坚持,而不是放弃的理由。写在前面这里前后端指的是开发的前后端。 转行前端有哪些疑虑? 在人生的抉择处,寻求一些别人的经验和总结,无可厚非,但是决定了就一定要坚定的走下去,谨慎是为了更好的坚持,而不是放弃的理由。写在前面:这里前后端指的是web开发的前后端。1、前端岗位需...
摘要:转行前端有哪些疑虑在人生的抉择处,寻求一些别人的经验和总结,无可厚非,但是决定了就一定要坚定的走下去,谨慎是为了更好的坚持,而不是放弃的理由。写在前面这里前后端指的是开发的前后端。 转行前端有哪些疑虑? 在人生的抉择处,寻求一些别人的经验和总结,无可厚非,但是决定了就一定要坚定的走下去,谨慎是为了更好的坚持,而不是放弃的理由。写在前面:这里前后端指的是web开发的前后端。1、前端岗位需...
摘要:转行前端有哪些疑虑在人生的抉择处,寻求一些别人的经验和总结,无可厚非,但是决定了就一定要坚定的走下去,谨慎是为了更好的坚持,而不是放弃的理由。写在前面这里前后端指的是开发的前后端。 转行前端有哪些疑虑? 在人生的抉择处,寻求一些别人的经验和总结,无可厚非,但是决定了就一定要坚定的走下去,谨慎是为了更好的坚持,而不是放弃的理由。写在前面:这里前后端指的是web开发的前后端。1、前端岗位需...
摘要:因为网站建设一般项目比较小,我一个人是可以完成前后端开发的,如果做成成品当然得加上小苏设计师。关键词选择因为面向的是单个城市业务,在城市选择上犹豫了不少时间,首先得是一个大城市,客户量足,当时我在北京,小苏是在一个省会城市。 我技术之外的资本是零,如果你也是这样,那这篇文章适合你! 这是我的故事之一,希望对你有启发。如果你每天下班后就是躺在床上刷刷斗音,看看微博。但是又总想摆脱黑暗迷乱...
阅读 994·2023-04-25 19:35
阅读 2632·2021-11-22 09:34
阅读 3679·2021-10-09 09:44
阅读 1713·2021-09-22 15:25
阅读 2931·2019-08-29 14:00
阅读 3371·2019-08-29 11:01
阅读 2595·2019-08-26 13:26
阅读 1735·2019-08-23 18:08