JavaScript错过了自变量的上下文

时间:2017-01-24 19:28:22

标签: 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/

有人可以解释为什么自我变量的背景会在调用后错过吗?

1 个答案:

答案 0 :(得分:2)

这不是错误,你只是错误地阅读调试器。

JS引擎注意到函数func1不使用变量self,因此优化度量为doesn't include it in the context object。您在调试器中看到的是global self

如果您在函数中使用self变量,例如console.log(self),您还会在调试器的闭包列表中看到它。请参阅https://jsfiddle.net/f44zbvvr/9/