其实起这个题目不太好,有点标题党的嫌疑,这里不会介绍在js的世界中,内存中的堆和栈是怎么来存储对象和怎样相互引用的。。。
问题从一小段代码开始
function foo(){
console.log(1);
foo=function(){
console.log(2)
}
}
foo()
//1
foo()
//2
脑图过一下貌似就是这两个结果,所以没有什么疑问
function foo(){
console.log(1);
foo=function(){
console.log(2)
}
}
var bar=foo;
bar()
//1
bar()
//1
这里的结构就有点出乎意料了,为什么和上面的结果有所出入那。
把第二段分析一下~。~
首先在内存中存在一个foo的引用名和foo引用的对象(就是后面的那个function)
然后另外一个引用名也只想了那个function(同foo应用的对象相同)
执行bar以后,foo的引用名被更改引用到新建的一个匿名函数上(bar还是引用之前的那个function)
再执行1一千遍还是和第一次一样的结果-_-
之所以犯了这样一个错误是因为请记住,引用是不会引用的。