首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能在引用外部环境时访问这个特定的变量?

问为什么我不能在引用外部环境时访问这个特定的变量?
EN

Stack Overflow用户
提问于 2016-09-29 00:21:58
回答 1查看 30关注 0票数 1

我正在学习JS中的词法作用域和执行上下文,并遇到了一个问题。

我对关键字this的理解可能有限,但我看到它引用了任何函数当前执行上下文中的所有变量。

考虑这个例子:

代码语言:javascript
复制
function b(){
  console.log(this);
}
var myVar = 1;
b();

在这里,我将获得myVar的控制台日志,该日志将被赋值为1。

现在来看这个例子:

代码语言:javascript
复制
function a(){
   function b(){
     console.log(this);
   }
  var myVar = 2;
  b();
}
var myVar = 100;
a();

当调用函数b时,我看到一个对myVar的引用,它被赋值为100。为什么没有赋值为2的对myVar的引用?

'this‘不是指当前函数的词法环境吗?在这种情况下,函数b包含在函数a中,而不是全局环境中。

EN

回答 1

Stack Overflow用户

发布于 2016-09-29 00:26:27

您对this的理解是完全错误的。

this的值(通常)取决于函数的调用方式。(详细信息请参见How does the “this” keyword work? )。

如果你是:

  • in a browser
  • 您的JS未在strict mode中运行(应该是)
  • 函数在没有显式上下文的情况下被调用

…然后,this将成为window对象。

通常,声明变量时,它只存在于声明时所在的作用域中。它不是任何对象的属性。

有一个例外:

当一个变量在全局作用域中声明时(即在任何函数外部或函数内部没有let或var ),它也将成为window对象的属性。

你所看到的效果就是这两件事的结合。

b();没有上下文,所以this是window。var myVar = 100;位于任何函数之外,全局函数也是如此,因此是window的一个属性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39752843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档