Javascript 循环参考示例



我有一个关于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。

在示例 1 中,someMethod 上下文捕获了 theThing 变量,对吗?

它可以捕获它,但它没有 - 您在console.log调用中引用someMessage而不是theThing.但由于两者都是全局变量,因此无论如何它们都被函数封闭。

在示例 2 中,是否有循环引用?SomeMethod引用了originalThing,这是Thing。

同样,不,someMethod只在someMessage(和console(关闭。replaceThing抓住了theThing,不过,这是一个真正的关闭例子。没有引用originalThing,这是一个局部变量,它被初始化但随后无处使用,将尽快被丢弃。

除了基本的全局环境引用thingThing引用someMethod关闭全局环境之外,没有特定的循环引用。

我有一个简单的问题关于[内存泄漏]

此处的任何内容都不构成内存泄漏。

你是说范围?

如果调用theTing.someMethod(),则theThing在方法范围内且可访问。

此外,没有某种方法上下文。当我们谈论JavaScript中的上下文时,我们指的是this。在theThing.someMethod内,你确实可以访问theThing的上下文(this(。

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();

最新更新