js 拾遗:连续赋值 && for 循环顺序对性能的影响
3371WEBJS 拾遗2019-08-09

连续赋值

在掘金看到一段很有意思的 js 代码

1
2
3
4
5
var a = {n: 1}
var b = a
a.x = a = {n: 2}
a // ?
b // ?

*1、a,b指向 {n:1} 内存一
*2、a.x 可以看出 内存一.x ,内存一的值被修改为是{n: 1, x: {…}},内存一.x 值被指向 a
*3、a 重新赋值执向 {n:2} 内存二
*4、若再修改内存二的属性 那么也同时修改 b.x 的值

1
2
a // {n: 2}
b // {n: 1, x: {…}}

https://stackoverflow.com/questions/38008672/how-does-a-x-a-n-b-work-in-javascript
https://juejin.im/pin/5d4930756fb9a07d8724214f

for 循环顺序对性能的影响

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var t1 = new Date().getTime()
for (let i = 0; i < 100; i++) {
for (let j = 0; j < 1000; j++) {
for (let k = 0; k < 10000; k++) {
}
}
}
var t2 = new Date().getTime()
console.log('first time', t2 - t1)

for (let i = 0; i < 10000; i++) {
for (let j = 0; j < 1000; j++) {
for (let k = 0; k < 100; k++) {

}
}
}
var t3 = new Date().getTime()
console.log('two time', t3 - t2)

1: k 执行次数 100001000100
j 执行次数 1000*100
i 执行次数 100

2: k 执行次数 100100010000
j 执行次数 1000*1000
i 执行次数 10000

总的循环次数是一样的
k 的执行次数不变,但是 j 和 i 执行次数变多,那么初始化次数也变多

https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/235