2013-10-04 6 views
1

ОК это какой-то кодСвойства объекта javascript функции [[scope]]?

function myFunc(){ 
    var myvar = 8; 
     function myFunc2(num){ 
      alert(myvar+num); 
     } 

    myFunc2(2); 

} 

myFunc(); 

я хочу, чтобы очистить свой ум так, пожалуйста, поправьте меня, если ошибаюсь

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

к моему пониманию, что происходит за сценой, является то, что in global execution context there it creates function object with the name myFunc` и его свойство [[scope]], присвоенное глобальному переменному объекту.

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

При создании объекта внутренней функции внутреннему свойству [[scope]] присваивается значение объекта переменной внешнего контекста внешнего контекста + объекта глобальной переменной, поэтому каждая функция создает свой собственный контекст выполнения, но до этого внутренняя функция каждой функции [[область ]].

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

+0

Вы спрашиваете, может ли переменное подъемное устройство каким-то образом вмешиваться в работу замыканий? Нет, не может. – bfavaretto

+0

Я хочу знать, что мои объяснения верны? Я знаю, как работают замыкания –

+0

Похоже, вы это понимаете, но что-то еще не ясно. Я просто не уверен, что *. – bfavaretto

ответ

1

Вот несколько указателей, основанных на моем понимании спецификации, и на основе того, что звучит неясно, на ваше объяснение:

  • Термин «Activation объект» был использован в ECMAScript 3, но не больше в текущей версии спецификации. ES5 использует термин «Лексическая среда» для обозначения типа (внутренний тип), состоящего из значения «Запись среды» и, возможно, ссылки на внешнюю лексическую среду.

  • Из-за этой ссылки на внешнюю лексическую среду область можно рассматривать как цепочку. Таким образом, доступ к внешним областям (включая глобальный охват) происходит через эту цепочку. (Когда вы говорите, что для свойства [[scope]] присваивается значение объекта переменной внешнего контекста внешнего объекта + объекта глобальной переменной », похоже, что обе записи копируются в Лексическую среду текущей функции, что не так, как это происходит.)

Надеюсь, что это поможет!

+0

Спасибо! Я читал «High Performance JS» (© 2010), а затем второй раздел «Тайны ниндзя JS» (© 2016) - эти термины ES3 исчезли в последнем, и я понятия не имел, почему. Благодаря! –

Смежные вопросы