关于新的javascript内存问题

时间:2011-05-25 09:39:43

标签: javascript new-operator

这是我的代码

    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 个答案:

答案 0 :(得分:3)

其他人已经回答了你的问题,但是你也可以在闭包中保留对变量的引用,这样它就不会每次创建而且不是全局变量,但是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)

答案 1 :(得分:2)

在函数定义之外定义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);

答案 2 :(得分:2)

  

每次“function_to_call”调用时都会生成“variable_need”吗?

如果你在函数之外定义它,那就不一定了,但是每次都不会重置它(所以如果函数修改了它,那么它将在以后的调用中保持修改)。

  

如果频繁调用“function_to_call”...是否需要制作原型以防止内存泄漏?

没有。除非你正在做一些事情来保持对函数内部(或特定数组)的引用打开,否则它将被垃圾收集。

答案 3 :(得分:1)

创建新数组的最有效方法不是:

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
];

答案 4 :(得分:1)

  

每次都生成“variable_need”   “function_to_call”调用的时间?

  

如果调用“function_to_call”   经常......是否需要制作   原型防止内存泄漏?

只要您没有创建任何闭包,就没有内存泄漏。 (不能说从发布的代码,什么是'v'?)。但是会有很多内存分配和释放。最好将* variable_need *移到函数外部。