2017-01-24 3 views
1

Вот мистическое поведение JavaScript. Это моя ошибка использования или ошибка?JavaScript пропустить контекст самопеременной

JavaScript код

function test(){ 

    var self = this; 

    self.func1 = function(){ 
    debugger; // here self == Window 
    } 
    debugger; //here self == test func 
    self.func1(); 
} 

var t = new test(); 

я предоставил JSfiddle, что вы можете попробовать сам:

https://jsfiddle.net/stanislavmachel/f44zbvvr/8/

Может кто-нибудь объяснить, почему контекст собственного переменного промаха после вызова?

+0

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this – Korgen

ответ

2

Это не ошибка, вы просто читаете отладчик неправильно.

Двигатель JS отмечает, что функция func1 не использует переменную self, так как ее оптимизируют doesn't include it in the context object. То, что вы видите в отладчике, - global self.

Если вы используете переменную self внутри функции, например. console.log(self), вы также увидите его в списке закрытия отладчика. См. https://jsfiddle.net/f44zbvvr/9/.

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