javascript - js函数内没有使用var定义的对象是局部对象吗?
typecho
typecho 2017-06-14 10:53:31
0
4
909

函数内没有使用var定义的对象应该是个全局对象呀
在红宝书P71页说是函数内部重写obj时,这个对象引用变成了一个局部对象,不解~~

typecho
typecho

Following the voice in heart.

全部回复(4)
洪涛

特地抽出了我的红宝书,这节,说的是参数按值传递;然后,对象按值传递,传递的是该对象所在地的指针。所以,第一步,有一个‘name’属性为'chen'就好理解了。
因为obj,是函数的参数,实际意义相当在函数内,var了一个obj,后期,函数执行完,就会被销毁。可能你看了后面的执行环境和作用域好理解一点。然后,obj = new Object() 时,obj的值,不是原person对象的指针了。
当然,你把第二行代码,换成'obj1',就有你说的全局声明的效果了。(很认真的答题)

学霸

你这样定义函数里面写的 只是一个形参 并不是实参 更谈不上全局和局部。。。。。。。。。。。。。。

女神的闺蜜爱上我

obj 是参数

淡淡烟草味

看了下网友给的参考答案,又自己琢磨了会,大概理解了,不知道对不对,八九不离十了吧!
ECMAScript中所有函数的参数是按值传递的
所以将person对象以实参形式传递给setName()时是将person对象的指针复制给了setName()
假设指向person对象的原始指针为一号,复制之后的指针为二号
这两个指针同时指向person对象
所以在函数内执行obj.name="chen";时会根据二号指针顺藤摸瓜的给person对象增加一个name属性
但在执行obj=new Object();时,会将二号指针指向一个新对象,而不是原来的person对象
所以在执行obj.name="long";时,并不会更改person对象的name属性
console.log(person.name);会返回"chen"
而obj即形参,并不是实参,不存在全局局部之分,在函数执行完毕之后即被销毁,也就是不再存在二号指针,也就不存在指向"long"这个name属性的指针了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!