JavaScript 函数参数传递问题? 5

同样都是值传递为什么可以给对象加属性?还有后面的varobj是把前一个obj覆盖了吗?还有这里左边错误没有输出。右边正常,变量声明放在使用的后面只有值类型的变量可以吗?... 同样都是值传递为什么可以给对象加属性? 还有后面的var obj是把前一个obj覆盖了吗?

还有这里

左边错误没有输出。右边正常,变量声明放在使用的后面只有值类型的变量可以吗?
展开
 我来答
hyjiacan
2014-11-15 · TA获得超过3912个赞
知道小有建树答主
回答量:894
采纳率:100%
帮助的人:1087万
展开全部
1 同样都是值传递为什么可以给对象加属性?
当参数为对象是,就不只是值传递而是引用传递了。所以楞以通过obj.name改变原对象的属性。

2 还有后面的var obj是把前一个obj覆盖了吗?
是的,当你再次var obj=new Object()的时候,会让js引擎将obj作为一个新的变量,参数obj在后面的代码中已经无效了。

3 左边错误没有输出。右边正常,变量声明放在使用的后面只有值类型的变量可以吗?
在js中,变量的声明永远都需要放在变量使用前,右边的结果参见上面2的说明。左边出错,是因为在执行到kk.name = 5的时候,会先检查变量kk是否存在,若不存在,当然不能调用它的name属性了,所以后面的代码都不会再执行。而在右边,kk=5相当于var kk = 5;所以可以在后面使用alert(kk)输出,但是再后面的代码 var kk 则会覆盖前面的kk变量(也就是说kk不再是5,而是一个新的变量了)。
追问
2,3能懂了,可1,JavaScript高级程序设计里说ECMAScript中所有的函数参数都是按值传递的啊。不过它还说就算是按值传递的,obj也会按引用来访问一个对象。可不可以按c语言的指针来理解,把指针的值也就是保存的地址传给函数,然后函数里的obj使用时就是引用内存里的那个地址,后面重新声明的话,就使obj指向后面objec的地址了?
追答
是这样理解的。
zhou2003737
2014-11-15 · TA获得超过1427个赞
知道小有建树答主
回答量:1082
采纳率:77%
帮助的人:402万
展开全部
1,javascript是可以自由的给对象增加属性。但是这个对象应该是基本数据类型。也就是说应该是Object类型的对象增加属性。像“10”(字符串),10(数字)不可以。后面的obj确实是将前面的obj覆盖了。
2.左边错误原因是执行kk.name的时候,kk还是undefined,所以给undefined增加属性是不能够的。
右边,执行kk的时候kk未定义,但是给kk赋值为5.所以是正确的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ygh31500
2014-11-15 · TA获得超过158个赞
知道答主
回答量:118
采纳率:100%
帮助的人:126万
展开全部
右边的意思就是你穿一个对象进来,那么自然就可以对该对象进行赋值了,然后有重新 NEW 一个对象,将传进来的对象替换了。本身就是对象,所以就可以给他的属性赋值了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-11-15
展开全部
  1. function set2(persen2){},此函数中 执行set2(persen2)这条语句,persen2是函数set2()的内部属性;    后面alert(persen2)返回undefined,persen2是第5行定义的外部全局变量。

  2. function set(obj){} ,此函数类同上一个,set(persen),的persen对象是外部对象传入内部,内部为此对象添加了name属性且赋值“like”。  

    函数内部的var obj不会覆盖前一个,作用阈不同,只在set()函数内部可用。

  3. 左侧var kk=new Object();创建对象没有定义name属性,在alert(kk.name)提示name是undefined。

  4. kk是全局变量,后面定义var kk;也是全局变量。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式