проблема памяти javascript о новых - PullRequest
0 голосов
/ 25 мая 2011

это мой код

    function function_to_call(text){
    var variable_need = new Array (
        0x3131, 0x3132, 0x3134, 0x3137, 0x3138, 0x3139,
        0x3141, 0x3142, 0x3143, 0x3145, 0x3146, 0x3147,
        0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e
    );

    ......

    return v;
}
    function_to_call(a)
    function_to_call(b)
    function_to_call(c)

Создается ли variable_need каждый раз, когда вызывается function_to_call?

Если function_to_call часто вызывается ...

Нужно ли делать прототип для предотвращения утечки памяти?

Ответы [ 5 ]

3 голосов
/ 25 мая 2011

Другие ответили на ваши вопросы, но вы также можете хранить ссылку на переменную в закрытии, чтобы она не создавалась каждый раз и не являлась глобальной переменной, но доступна для функции function_to_call:

var function_to_call = (function() {
  var variable_need = [
      0x3131, 0x3132, 0x3134, 0x3137, 0x3138, 0x3139,
      0x3141, 0x3142, 0x3143, 0x3145, 0x3146, 0x3147,
      0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e
  ];
  return function (text) {

    // variable_need available here

    return v;
  };
}());

function_to_call(a)
function_to_call(b)
function_to_call(c)
2 голосов
/ 25 мая 2011

Генерируется ли "variable_need" каждый раз, когда вызывается "function_to_call"?

Да.

Не было бы, если бы вы определили его вне функции, но тогда он не будет сбрасываться каждый раз (поэтому, если функция изменила его, то она останется модифицированной для последующих вызовов).

Если "function_to_call" часто вызывается ... Нужно ли создавать прототип для предотвращения утечки памяти?

Нет. Если вы не сделаете что-то, чтобы сохранить ссылку на внутреннюю часть функции (или, в частности, на массив), открытой, она будет собирать мусор.

2 голосов
/ 25 мая 2011

Определите ваш массив variable_need вне определения вашей функции:

var variable_need = [
    0x3131, 0x3132, 0x3134, 0x3137, 0x3138, 0x3139,
    0x3141, 0x3142, 0x3143, 0x3145, 0x3146, 0x3147,
    0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e
];

function function_to_call(text) {

    // do stuff with variable_need

    return v;
}

function_to_call(a);
function_to_call(b);
function_to_call(c);
1 голос
/ 25 мая 2011

генерируется ли "variable_need" каждый раз время вызова "function_to_call"?

Да.

Если вызван "function_to_call" часто ... это нужно сделать прототип для предотвращения утечки памяти?

Нет утечки памяти, если вы не создаете никаких замыканий. (Не могу сказать по опубликованному коду, что такое «v»?). Но будет много выделения и освобождения памяти. Лучше переместить * variable_need * за пределы функции.

1 голос
/ 25 мая 2011

Наиболее эффективным способом создания нового массива не является:

var something = new Array();

а точнее:

var something = [];

Вы должны использовать что-то похожее на:

var variable_need = [
    0x3131, 0x3132, 0x3134, 0x3137, 0x3138, 0x3139,
    0x3141, 0x3142, 0x3143, 0x3145, 0x3146, 0x3147,
    0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e
];
...