我想知道为什么jsLint抱怨我在定义一些变量时可能会泄漏一个变量:
var foo = bar = {};
它说我可能会泄漏bar
。
我的预感是因为bar
是全局变量。那么,如何指定foo
和bar
指向同一行中的同一个对象? JavaScript不会让我写:
var foo = var bar = {};
或者是其他问题?
答案 0 :(得分:2)
您有两个选择:
var foo = {},
bar = {};
或者:
var foo, bar;
foo = bar = {};
第一个为foo
和bar
创建单独的对象
在第二个示例中,foo
和bar
都指向相同的对象。
你不能(/不应该尝试)声明和使用单个var
语句分配多个变量,和一行中的单个对象文字。然后你只是声明指向同一个对象的多个变量。
答案 1 :(得分:2)
最佳方法是:
var foo = {} , bar = {};
但foo
和bar
会引用两个不同的对象。
如果您希望它们引用同一个对象,那么:
var foo = {}, bar = foo;
答案 2 :(得分:2)
它抱怨“泄漏变量”的原因是因为你只是声明了局部变量foo
。 bar
未被声明,它只是被分配,因此这会创建一个全局变量。您的陈述相当于:
var foo = (bar = {});
简称:
bar = {};
var foo = bar;
这样编写,你可以看到没有bar
变量的声明。如果要在单个var
语句中声明多个变量,则必须用逗号分隔它们:
var bar = {}, foo = bar;
或者你可以把它们写成单独的陈述:
var bar = {};
var foo = bar;
您还可以分隔声明和作业:
var foo, bar;
foo = bar = {};