作家
登录

JavaScript传递变量: 值传递?引用传递?

作者: 来源:www.28hudong.com 2013-03-30 00:59:49 阅读 我要评论

当变量A赋值给变量B时,会将栈中的值复制一份到为新变量分配的空间中。 如何理解? 复制代码 代码如下: var x = y = 1; y = 2; alert(x); x的值为多少? 复制代码 代码如下: var obj = {}; var sub = {}; sub['id'] = 3; obj['sub'] = sub; sub['id'] = 4; alert(obj['sub']['id']); obj['sub']['id']的值又为多少?他们真的符合你的预期吗? 我们分别运行2段代码,发现第1段程序中x的值没有改变,而第2段程序中的obj['sub']['id']的值却改变了。同样是一个赋值操作,同样是修改另外一份拷贝的值,为什么一段程序源变量没变,一段程序源变量变化了呢?这个传递到底是按值传递还是按引用传递的呢? 李松峰翻译的《JavaScript 高级程序设计 第二版》中给出了答案。 在开始的这2个例子中,事实上都复制了A的值给B,不同的是,在第一个例子中,A的值是int型的1,而在第二个例子中,A的值是一个地址指针,这个地址指针可以访问到一个对象,复制之后,第1个例子中的B的值变成了新的int, 他的值为1,而第2个例子中B的值变成了新的地址指针,他的值为这个对象的地址。 下面的例子可以帮助理解 复制代码 代码如下: function setName(obj){ obj.name = "test1"; obj = {}; obj.name = "test2"; } var person = new Object(); setName(person); alert(person.name); 可以看到的是,尽管调用了setName函数修改了变量的name属性,但是person.name的值并没有改变。这是因为在函数中,obj指向的地址被改变了,因此修改这个地址的name属性,并不会对原地址的name属性造成影响。从另一个方面,也印证了JavaScript的传递是按值传递。

  推荐阅读

  基于JQuery的日期联动实现代码

实现目标: 两个日期,有下拉框:复制代码 代码如下: <head> //导入jquery地址 <script src="(Jquery地址)" language="JavaScript" type="text/javascript"></script> <script type="text/javascript"> //start>>>详细阅读


本文标题:JavaScript传递变量: 值传递?引用传递?

地址:http://www.17bianji.com/kaifa2/JS/24906.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)