我在GitHub前端面试问题集中发现了这个问题:
var foo = {n: 1}; var bar = foo; foo.x = foo = {n: 2};
问题:foo.x的值是什么?
答案是undefined
。
我已经进行了一些研究,并且我理解这个问题(如果我错了,请纠正我):
var foo = {n: 1};
声明一个foo
属性n
等于1 的对象。var bar = foo;
声明一个对象bar
,该对象引用与相同的对象foo
。foo.x = foo = {n: 2};
我相信等于 foo.x = (foo = {n: 2});
foo.x
等于undefined
。但是,的值bar.x
是object {n:2}
。如果bar
和foo
是指同一个对象,为什么bar.x
得到的值,而foo.x
为undefined
?真正发生了foo.x = foo = {n: 2};
什么?
foo.x = foo = {n: 2};
判定foo.x
是指一种属性x
的的{n: 1}
对象,受让人{n: 2}
到foo
,和受让人的新值foo
- {n: 2}
-为属性x
的的{n: 1}
对象。
重要的是,foo
这foo.x
指的是之前确定foo
的变化。
参见ES5规范的11.13.1节
令 lref 为评估 LeftHandSideExpression 的结果。
令 rref 为评估 AssignmentExpression 的结果。
赋值运算符从右到左关联,因此您得到:
foo.x = (foo = {n: 2})
首先评估左侧,然后评估右侧。
本文向大家介绍JavaScript实用代码小技巧,包括了JavaScript实用代码小技巧的使用技巧和注意事项,需要的朋友参考一下 在上次的 “Chrome DevTools 你可能不知道的小技巧” 文中,得到很多开发朋友的反馈确实不知道这些小技巧。今天,我们来聊一聊在 EcmaScript5/6+ 中的一些小技巧,欢迎评论区讨论下更多技巧。 JSON.stringify 我们平时经常会用到JSO
问题内容: 我最近在proggit上遇到了对它的引用,并且(到目前为止)没有对其进行解释。 我怀疑这可能是吧,但我不知道。 问题答案: 如果设置为共享库的路径,则该文件将 在 任何其他库(包括C运行时) 之前 加载。因此,要运行您的特殊实现,请执行以下操作:
本文向大家介绍JavaScript代码简化技巧实例解析,包括了JavaScript代码简化技巧实例解析的使用技巧和注意事项,需要的朋友参考一下 函数式编程可以使您的代码更简单。简单意味着代码易于阅读和理解,可测试和可维护。 在本文中,我描述了一些函数式编程(FP)技巧,您可以使用它们来简化代码,从而使代码更好。 摆脱临时变量和不变性原则 函数式编程倾向于不变性,这种不变性原则意味着在初始化变量之后
本文向大家介绍Python使用pdb调试代码的技巧,包括了Python使用pdb调试代码的技巧的使用技巧和注意事项,需要的朋友参考一下 什么是pdb 不知道大家在用Python写代码出现报错时是怎样调试的,从报错提示定位回去一步一步check每一行?如果没有IDE或者命令行写代码时又该怎样快速调试?这时如果使用pdb进行调试将会异常方便。 Pdb就是Python debugger,是python自
本文向大家介绍js 奇葩技巧之隐藏代码,包括了js 奇葩技巧之隐藏代码的使用技巧和注意事项,需要的朋友参考一下 昨天在群看到有人发了个文章叫《“短”化你的代码》,思路非常不错,采用unicode的零宽字符来实现字符隐藏,虽然有字符,可是你却看不见它。 这篇文章详细的介绍了这种方法的实现原理,最后还给出了一个生成工具。 当然,作者算了留了一个小小的练习给我们,因为他只用了两个字符,导致转换后的数据是
本文向大家介绍JavaScript小技巧整理,包括了JavaScript小技巧整理的使用技巧和注意事项,需要的朋友参考一下 本文整理总结了JavaScript的小技巧。分享给大家供大家参考,具体如下: 1.组织默认事件 阻止默认事件,h5默认的input type='date'在某些浏览器和android设备上没有效果,这时要调用h5+的时间选择器,但是要组织input默认的click事件,代码如