定义变量时内存泄漏

时间:2015-08-12 08:07:52

标签: javascript

我想知道为什么jsLint抱怨我在定义一些变量时可能会泄漏一个变量:

var foo = bar = {};

它说我可能会泄漏bar

我的预感是因为bar是全局变量。那么,如何指定foobar指向同一行中的同一个对象? JavaScript不会让我写:

var foo = var bar = {};

或者是其他问题?

3 个答案:

答案 0 :(得分:2)

您有两个选择:

var foo = {},
    bar = {};

或者:

var foo, bar;
foo = bar = {};

第一个为foobar创建单独的对象 在第二个示例中,foobar都指向相同的对象。

你不能(/不应该尝试)声明使用单个var语句分配多个变量,一行中的单个对象文字。然后你只是声明指向同一个对象的多个变量。

答案 1 :(得分:2)

最佳方法是:

var foo = {} , bar = {};

foobar会引用两个不同的对象。

如果您希望它们引用同一个对象,那么:

var foo = {}, bar = foo;

答案 2 :(得分:2)

它抱怨“泄漏变量”的原因是因为你只是声明了局部变量foobar未被声明,它只是被分配,因此这会创建一个全局变量。您的陈述相当于:

var foo = (bar = {});

简称:

bar = {};
var foo = bar;

这样编写,你可以看到没有bar变量的声明。如果要在单个var语句中声明多个变量,则必须用逗号分隔它们:

var bar = {}, foo = bar;

或者你可以把它们写成单独的陈述:

var bar = {};
var foo = bar;

您还可以分隔声明和作业:

var foo, bar;
foo = bar = {};