这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文通过具体的示例来给大家详细解释了下 javascript 的连续赋值问题,十分的实用,有需要的小伙伴可以参考下。
前几天在搜索面试题时发现了这么一段代码, 执行完后感觉完全不与所想的一样
- var a = {
- n: 1
- };
- var b = a;
- a.x = a = {
- n: 2
- };
- console.log(a.x);
- console.log(b.x);
输出结果为:
undefined
[object Object]
一开始以为语句应该是先给 a 赋值 {n : 2} , 然后再将 a.x 赋值 {n : 2} ;
但事实却不是那样, 于是改动了一下代码, 添加几条 log
- var test;
- var a = {
- get test() {
- console.log("call a get");
- return test;
- },
- set test(value) {
- console.log("call a set");
- test = value;
- }
- }
- var test2;
- var b = {
- get test2() {
- console.log("call b get");
- return test2;
- },
- set test2(value) {
- console.log("call b set");
- test2 = value;
- }
- }
- a.test = {
- n: 1
- };
- b.test2 = a.test;
- console.log("begin");
- a.test.x = a.test = {
- n: 2
- };
这样, 在 begin 后边, 这条赋值到底执行了什么就一目了然了.
这是语句执行时打印的 log
先触发了一次 get, 然后触发了一次 set.
本人猜想, 该条语句执行的顺序为, 先将左边变量取出, 然后执行赋值.(在执行该条语句前, 先将对象引用取出, 然后从右到左执行赋值)
来源: http://www.phperz.com/article/17/0426/270484.html