Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос про рекурсию и замыкание (https://javascript.ru/forum/misc/56214-vopros-pro-rekursiyu-i-zamykanie.html)

nanoT1m 04.06.2015 21:47

Вопрос про рекурсию и замыкание
 
function log(text) {
  document.write(text)
}

var n = 2;
var k = 2;
var arr = [];
var j = 0;

function gen(pos) {
  if (pos == n) {
    log(arr);
    console.log(arr);
    log("<br>");
    return;
  }

  for (var i = 0; i < k; i++) {
    arr[pos] = i;
    gen(pos+1);
  }
}

gen(0);


Не могу понять почему в приведенном коде функции
12| log(arr)
и
13| console.log(arr)
выводят разные результаты. Может мне кто-нибудь это разъяснить?:-?

рони 04.06.2015 22:00

nanoT1m,
и в каком браузере разные?

nanoT1m 04.06.2015 22:06

Извиняюсь, надо было в других браузерах проверить. В Safari результаты разные.

nanoT1m 04.06.2015 22:08

рони,
console.log() в Safari выводит
[1, 1]
[1, 1]
[1, 1]
[1, 1]

nanoT1m 04.06.2015 22:58

var n = 2;
var k = 2;
var arr = [];
var cache = [];
var l = 0;

function gen(pos) {
  if (pos == n) {
    cache[l++] = arr;
    return;
  }

  for (var i = 0; i < k; i++) {
    arr[pos] = i;
    gen(pos+1);
  }
}

gen(0);

console.log(cache[0])


в консоль выводит [1,1], а хотелось бы [0,0] :( в чем же проблема?


Часовой пояс GMT +3, время: 01:02.