与Javascript中的变量范围相关的问题

时间:2017-04-03 13:15:17

标签: javascript

我希望我的代码给我“2”作为输出,但这显示“1”作为输出。 请告诉我我的代码中必须做哪些更改才能给出正确的结果。

var a = 1;

function x() {
  var a = 2;

  function b() {
    var self = this;
    console.log(self.a);
  }

  b();
}

x();

3 个答案:

答案 0 :(得分:5)

全局变量是window对象的属性,因此self.a为您提供1,因为selfwindow。 (进一步阅读:How does the “this” keyword work?)。

局部变量不是任何对象的属性。无法访问它们,就好像它们是对象的属性一样。只需记录a而不是self.a

答案 1 :(得分:0)

尝试使用以下代码将“2”打印到浏览器控制台。在这里,我将函数x更改为对象。在这里我添加了“a”作为属性,“b”作为函数添加。然后最后将b()函数称为“x.b()”。

var a = 1;

var x=
{
    a :2,

    b: function()
    {
        var self = this;
        console.log(self.a);
    }


}

x.b();

答案 2 :(得分:-3)

试试这个:

var a = 1;
function x() {
  a = 2;
  function b() {
    var self = this;
    console.log(self.a);
  }
  b();
}
x();