谁来解释一下这个现象

cwk44 2014-06-09 10:57:27
<script>
function test() {
this.var1 = {a:'aaa'};

this.init = function () {
this.show(this.var1);
};
this.show = function (v) {
v.a = 'bbb';
console.log(this.var1.a);

v = {a:'ccc'};
console.log(v.a);
console.log(this.var1.a);
};

}


var obj = new test()
obj.init();
</script>

你觉得三个地方分别会输出什么,
如果都说对了的话解释一下为什么会这样。
...全文
157 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cocl 2014-06-09
  • 打赏
  • 举报
回复
引用 2 楼 kendyjack 的回复:
v = {a:'ccc'}; 这个v是一个变量,而非参数里的v,你理解一下下面这个例子

var b = 1;
    function tt2(a){
    	a = 10;
    }
    tt2(b);
    alert(b);
v = {a:'ccc'}; 意思是这个时候把v赋值为一个变量,并断开与 this.var1的联系了?
  • 打赏
  • 举报
回复
        this.show = function (v) {//v对象地址引用,不是值引用,所以修改了v就相当于修改了 this.var1
            v.a = 'bbb';
            console.log(this.var1.a);//bbb

            v = { a: 'ccc' };//这里给v赋值另外一个对象,不再指向 this.var1
            console.log(v.a);//ccc
            console.log(this.var1.a);//bbb
        };
夜雨_Jason 2014-06-09
  • 打赏
  • 举报
回复
v = {a:'ccc'}; 这个v是一个变量,而非参数里的v,你理解一下下面这个例子

var b = 1;
    function tt2(a){
    	a = 10;
    }
    tt2(b);
    alert(b);
zhjdg 2014-06-09
  • 打赏
  • 举报
回复
在红色处,放个断点就知道。 this.show = function (v) { v.a = 'bbb'; console.log(this.var1.a);

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧