2014-01-24 2 views
0

Когда у меня есть функция, имеет ли переданный параметр один и тот же объем в методе обратного вызова внутри функции? то есть в следующей функции действуют как xx, так и yy?JavaScript scoping, параметр в функции такой же, как и локальная переменная в функции?

onMyFunction: function(component) { 
    var myLocal = 7; 
    my.load({ 
    callbackfunction: function() { 
     // can I access both 
     var xx = component; 
     var yy = myLocal; 
    } 
    }); 
+4

Да. Вы могли бы просто попробовать это;) –

+0

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

+0

Вы можете опубликовать результаты, которые вас смущают, и попросить объяснение, может быть, это поможет вам больше? Об этом не так много говорить. Параметры скопированы точно так же, как и локальные переменные, и для всех целей и целей ведут себя точно так же, как и локальные переменные. –

ответ

1

Параметры области действия так же, как локальные переменные и для всех намерений и целей, ведут себя так же, как локальные переменные.

Фактически, когда функция выполняется, параметры и переменные хранятся в одной и той же внутренней «карте», поэтому во время выполнения было бы невозможно различать параметры и переменные. Не менее according to the specification.

4

да они оба действительны .. это то, что затворы предназначены для ...

+0

так что входной параметр точно совпадает с областью определения локальной переменной? –

+0

yes .. в основном функция «callbackfunction», которую вы объявляете, создается вместе с внутренней структурой, которая указывает на эти переменные .. поэтому он все еще имеет доступ, даже когда внешний funciton возвращается, и стек уже давно ушел. – CaldasGSM

0

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

Если вы заинтересованы в этой теме, я бы рекомендовал https://github.com/getify/You-Dont-Know-JS/blob/master/scope%20&%20closures/README.md особенно часть на функции/блока Scope а также Scope Closures.

:)

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