Пример цикла Javascript - PullRequest
       1

Пример цикла Javascript

0 голосов
/ 04 июня 2018

У меня простой вопрос о ссылках на циклы в javascript.

Является ли это ссылкой на цикл?

var theThing=null;

theThing = {
longStr: new Array(1000000).join('*'),
someMethod: function () {
  console.log(someMessage);
}

В контексте someMethod фиксируется переменнаяThing, верно?

Пример 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 ссылается на оригинальную вещь, которая есть вещь.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

В примере 1 контекст someMethod захватывает переменнуюThing, верно?

Это может захватить ее , но это не - вы ссылаетесьsomeMessage в console.log вызове не theThing.Но поскольку обе они являются глобальными переменными, они все равно закрыты функцией.

В примере 2 есть ссылка на цикл?SomeMethod ссылается на originalThing, который является Вещью.

Опять же, нет, someMethod закрывается только на someMessageconsole).replaceThing захватывает theThing, но это подлинный пример закрытия.Ничто не ссылается на originalThing, это локальная переменная, которая инициализируется, но затем используется нигде и будет отброшена как можно скорее.

Нет специальной циклической ссылки, кроме базовой глобальной среды, ссылающейся на thingThing referenceing someMethod закрытие глобальной среды.

У меня простой вопрос о [утечках памяти]

Ничто здесь не является утечкой памяти.

0 голосов
/ 04 июня 2018

Вы имеете в виду Scope?

Если вы вызываете 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...