javascript - 在 javascript/jquery 中通过引用和值传递

标签 javascript jquery pass-by-reference pass-by-value

我有一个测试用例如下:

$(document).ready(function() {
   var arrayList=[{"name":"pradip"},{"name":"Tengi"}];
   var del = function(list) {
      list.splice(1,1);
      $("div").append("function:" + list.length +"<br>"); 
   };
   $("div").append("original:" + arrayList.length+"<br>");
   del(arrayList);
   $("div").append("modified"+ arrayList.length+"<br>");

   var test=1;
   var increase=function(a){
      a++;
      $("div").append("function="+a+"<br>");
   }
   $("div").append("original test="+test+"<br>");
   increase(test);
   $("div").append("increased test="+test+"<br>"); 
});

输出是:

original:2
function:1
modified1
original test=1
function=2
increased test=1

当我按值将数组传递给函数,并且在函数中更改值时,更改也会反射(reflect)在原始数组中,但在其他情况下,没有更改。

JSFiddle

为什么按值传递就像按数组的引用传递一样?

最佳答案

您正在按值传递对数组的引用。

您现在拥有对同一数组实例的两个引用。

如果您不希望数组发生更改,则需要显式创建一个副本。

关于javascript - 在 javascript/jquery 中通过引用和值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239993/

相关文章:

c++ - 在 C++ 中通过引用传递指针?

arrays - 从 C# 到 F# : Pinned Array and Stringbuilder in external function called from F#

javascript - 取消已关闭的 Marionette Backbone View 中的超时

javascript - 如何检查div是父div的最后一个 child

javascript - summernote - 在 HTML View 中更新代码

javascript - Jquery FullCalendar - 禁用单个日期的大小调整

c - 通过多个函数传递一个变量,没有得到想要的结果

javascript - 内容安全策略和 mod_pagespeed 评估

javascript - HTML 和 JavaScript - Bootstrap

javascript - 在鼠标悬停时显示/隐藏 jQuery 对话框