博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两年后的随笔+this的思考
阅读量:6454 次
发布时间:2019-06-23

本文共 1153 字,大约阅读时间需要 3 分钟。

恍惚看到自己在博客园的文章,唯一的一篇已经是接近两年前,再看看自己的名字...已然中枪了

从两年前的.net初学者,到现在工作之后阴差阳错转为前端...

两年过去了,现在回想起来,感觉成长的太少...

稀里糊涂的忙工作,技术上进步不大,总是在业务里徘徊...这可能也是大多数程序员的状态.没有在某一领域技术深度.慢慢无休止的新项目,不能再这样下去了.

看到很多技术致富的例子.但是在前端这一领域,好像"专才"的神通有点施展不开.前端更需要的是"通才"...自己需要学习的东西还有很多

再一次拿起博客来,下一次的回顾,希望自己的内心是暖的...

上句不接下句,不明所以的扯淡结束,正题开始:

在面试题里遇到的问题

 

1 var foo = {2     bar: function() {3         return this.baz;4     },5     baz: 16 };7 (function() {8     return typeof arguments[0]();9 })(foo.bar)

 

面试题如上.我以为答案会是"number",结果是"undefined",让我一头雾水. 我记得看书里说过函数在通过对象的方法调用时,this会赋值为该对象的.看来还是没有深入理解...

晚上回去再去翻翻书,待续...

更新内容

1 (function(a) {2     console.log("形参调用:"+a());3     console.log("arguments调用:"+arguments[0]());4 })(foo.bar)

先看上面这段修改过的代码.

首先这里的自执行的匿名函数没有什么疑问,问题出在调用函数的方式.这里有两种

  • a()
    js的传参都是复制传递的,也就是说在传递foo.bar时,是将函数bar的引用地址复制传递给了匿名函数.理解为直接定位到了一个function,其效果等同与bar(),这里的this指向了window.所以结果为undefined.从字面理解更直观a()这种调用方式,是函数调用,this将会赋值为window
  • arguments[0]()
    这里就很诱惑人了,先说答案,这里的this指向的是arguments.是不是很奇怪.其实我们被arguments的数组形式迷惑了.arguments实际上是个对象.并不是一个数组.现在问题就明了了.arguments[0]()等同于arguments.a().是方法的调用,自然this是指向arguments对象了

对js执行机制了解甚少,以上结论没有考证,是自己推测得来…欢迎大牛拍砖,指正

转载于:https://www.cnblogs.com/bgjc/p/3161344.html

你可能感兴趣的文章
MySQL COLUMNS分区
查看>>
Linux第二周学习笔记(4)
查看>>
mongoDB应用
查看>>
决心书
查看>>
网络营销培训——软文营销为什么变得重要?
查看>>
智邦国际ERP系统实现手机端扫码汇报生产工序
查看>>
jenkins任意文件读取漏洞复现与分析 -CVE-2018-1999002
查看>>
Jersey 2.x 服务器端应用支持的容器
查看>>
iOS安装包瘦身指南
查看>>
uva 10976 Fractions Again?!
查看>>
企业产品质量管理实施办法
查看>>
安卓软件开发需要学什么你知道吗?
查看>>
浅谈 T-SQL语句操纵数据表
查看>>
PPT关于文本格式的妙招技法
查看>>
跨域问题:解决跨域的三种方案
查看>>
seo发展趋势以及seo就业情况
查看>>
mysql5.7 社区zip版安装配置
查看>>
SqlServer系列笔记—变量
查看>>
主流开源云系统PK
查看>>
对产品经理职位的正确认识
查看>>