Есть ли способ переопределить области действия существующей функции в JavaScript? - PullRequest
0 голосов
/ 30 января 2020

Я столкнулся с этой проблемой, я хотел бы, чтобы функция была доступна извне, но она также должна наследовать некоторые свойства, основанные на области видимости, потому что она используется в JSON.stringify() в качестве необязательного строкового спецификатора и поэтому не может передавать дополнительный контекст в это.

Итак, допустим, у меня есть этот код

let object = {
  function1(){ 
    let a = 1
    console.log(object.function2()) // a is not defined undefined
  },
  function2(){ return a }
}

Так что мне интересно, есть ли способ изменить состояние закрытия / области видимости для функции 2, например связать новый контекст этого, но привязка всей области видимости.

Единственный способ, который я выяснил, это

let object = {
  function1(){ 
    let a = 1
    let function2 = eval('(function '+object.function2.toString()+')')
    console.log(function2()) // 1
  },
  function2(){ return a }
}

Причиной этого является управление памятью, так как я не хочу создавать новую функцию каждый раз, когда другая функция вызывается.

1 Ответ

0 голосов
/ 30 января 2020

Мне интересно, есть ли способ изменить состояние закрытия / области действия функции, например, привязка нового контекста, но привязка всей области.

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

Лучше всего, вероятно, установить значение переменной, которая уже находится в области действия функции.

...