不同函数中的Javascript函数数组问题

不同函数中的Javascript函数数组问题,javascript,arrays,algorithm,data-structures,Javascript,Arrays,Algorithm,Data Structures,因此,我正在自学javascript数据结构,并尝试[Leetcode 200][1]。我想知道为什么如果我在这样一个函数中有网格数组,它会工作: function numIslands(grid) { const H = grid.length; const W = H && grid[0].length; let count = 0; for (let r = 0; r < H; r++) { for (let c = 0; c < W;

因此,我正在自学javascript数据结构,并尝试[Leetcode 200][1]。我想知道为什么如果我在这样一个函数中有网格数组,它会工作:

function numIslands(grid) {
  const H = grid.length;
  const W = H && grid[0].length;
  let count = 0;

  for (let r = 0; r < H; r++) {
    for (let c = 0; c < W; c++) {
       if (grid[r][c] === '0') continue;
  
       count++;
        dfs(r, c);
     }
   }
return count;

function dfs(r, c) {
   if (r < 0 || c < 0 || r === H || c === W) return;
   if (grid[r][c] === '0') return;

   grid[r][c] = '0';
   dfs(r-1, c);
   dfs(r+1, c);
   dfs(r, c-1);
   dfs(r, c+1);
  }
 }
它是否与数组如何通过引用或值传递有关,我仍然不清楚其中的区别。非常感谢。
[1] :

dfs
调用自身时,问题可能是您没有通过
网格
H
W

dfs(r - 1, c);
dfs(r + 1, c);
dfs(r, c - 1);
dfs(r, c + 1);
该错误表示
网格
网格[r]
未定义。如果没有显式传递参数值,参数将设置为
未定义

您也必须在此处传递这些值:

dfs(r - 1, c, grid, H, W);
dfs(r + 1, c, grid, H, W);
dfs(r, c - 1, grid, H, W);
dfs(r, c + 1, grid, H, W);

JavaScript中的每个值都是按值传递的,但如果传递的是对象,则该值是一个引用。传递引用和传递引用是两件不同的事情。传递值/引用描述变量之间的关系,而不是值之间的关系。
dfs(r - 1, c, grid, H, W);
dfs(r + 1, c, grid, H, W);
dfs(r, c - 1, grid, H, W);
dfs(r, c + 1, grid, H, W);