在非全局范围内通过`this`访问声明的变量

时间:2015-06-09 21:26:54

标签: javascript scope

var x = 16;
console.log(this["x"]); // 16

我对此很好,但是:

(function () {
  var y = 16;
  console.log(this["y"]); // undefined
}());

为什么我们无法通过this访问变量?!

我知道在分配值时可能会发生这种情况,例如:

(function () {
  x = 16; // will assigned as `this["x"] = 16`
  console.log(x); // 16;
}());

非全球范围内的var问题是什么?!

1 个答案:

答案 0 :(得分:2)

您应该阅读this的工作原理。

使用var x = 16在本地范围内声明变量与执行this.x = 16不同。前一个例子只是一个局部变量,后者影响局部上下文。

你的例子:

(function () {
  var y = 16;
  console.log(this["y"]); // undefined
}());

设置一个名为y的局部变量,但随后查找当前上下文中定义的y,可能是window.y。由于局部变量ywindow.y不同,因此未定义。