javascript指针

来源:互联网 发布:微信照片打印机软件 编辑:程序博客网 时间:2024/06/01 23:24

其实起这个题目不太好,有点标题党的嫌疑,这里不会介绍在js的世界中,内存中的堆和栈是怎么来存储对象和怎样相互引用的。。。


问题从一小段代码开始

function foo(){console.log(1);foo=function(){console.log(2)}}foo()//1foo()//2
脑图过一下貌似就是这两个结果,所以没有什么疑问


function foo(){console.log(1);foo=function(){console.log(2)}}var bar=foo;bar()//1bar()//1
这里的结构就有点出乎意料了,为什么和上面的结果有所出入那。

把第二段分析一下~。~

首先在内存中存在一个foo的引用名和foo引用的对象(就是后面的那个function)

然后另外一个引用名也只想了那个function(同foo应用的对象相同)

执行bar以后,foo的引用名被更改引用到新建的一个匿名函数上(bar还是引用之前的那个function)

再执行1一千遍还是和第一次一样的结果-_-


之所以犯了这样一个错误是因为请记住,引用是不会引用的。



原创粉丝点击