我有一个关于javascript循环引用的简单问题。
这是一个循环参考吗?
var theThing=null;
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
console.log(someMessage);
}
someMethod上下文捕获theThing变量吗?
示例2:
var theThing = null;
var replaceThing = function () {
var originalThing = theThing;
theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
console.log(someMessage);
}
};
};
setInterval(replaceThing, 1000);
在示例2中,是否有循环参考? SomeMethod引用originalThing,这是Thing。
答案 0 :(得分:0)
你的意思是范围?
如果您致电theTing.someMethod()
,则theThing
在范围内且可在该方法中使用。
此外,没有someMethod上下文。当我们在JavaScript中讨论上下文时,我们会引用this
。在theThing.someMethod
中,您确实可以访问this
的上下文(theThing
)。
var foo = "bar";
var obj = {
name: "Lukas",
method: function() {
// scoped foo variable
console.log(foo);
// scoped obj variable
console.log(obj.name);
// context
console.log(this.name);
}
}
obj.method();
答案 1 :(得分:0)
在示例1中,someMethod上下文捕获了theThing变量吗?
could capture it但it doesn't - 您在someMessage
来电中引用了console.log
而非theThing
。但由于两者都是全局变量,所以无论如何它们都会被函数关闭。
在示例2中,是否有循环参考? SomeMethod引用originalThing,这是Thing。
同样,不,someMethod
仅关闭someMessage
(和console
)。 replaceThing
捕获theThing
,这是关闭的真实例子。没有引用originalThing
,这是一个初始化但随后无处使用的局部变量,会尽快被丢弃。
除了引用thingThing
引用someMethod
关闭全局环境的基本全局环境之外,没有特定的循环引用。
我有一个关于[内存泄漏]的简单问题
这里没有任何东西构成内存泄漏。