Clouse与非关闭函数+“ this”?

时间:2019-11-11 07:48:31

标签: javascript closures

只是想了解闭包与非闭包函数。因此,当我运行以下命令时...

function outer()
{
     var i = 0;
     i++;
     
     console.log( i );

}

outer(); // prints 1
outer(); // prints 1
outer(); // prints 1

但是当我运行以下命令时...

function outer()
{
         var i = 0;

         function inner()
         {
                  i++;
                  console.log( i );
             }

         return inner;
}

var closure = outer();
closure(); // prints 1
closure(); // prints 2
closure(); // prints 3

很好。我了解以上内容。但是,当我尝试运行以下命令时...

function outer()
{
     var i = 0;
     i++;
     
     console.log( i );

}

var closure = outer();
closure(); // prints 1
closure(); // prints 2
closure(); // prints 3

我收到一个错误,因为与闭包不同,此处未返回该函数。因此,我将其修改为以下内容...

function outer()
{
     var i = 0;
     i++;
     
     console.log( i );

    return this;
}

var closure = outer();
closure(); // prints 1
closure(); // prints 2
closure(); // prints 3

我仍然遇到错误,只是发现在这种情况下,this没有引用父函数...而是引用了全局对象。难怪它给了一个错误。但是,我可以用this代替outer()函数吗?

第二,即使那样...我是否可以模拟关闭?我认为不是...但是为什么?

1 个答案:

答案 0 :(得分:0)

此代码var closure = outer()将执行外部函数,并将结果分配给closure。但是由于outer closure()没有返回任何内容,因此无法正常运行。在这种情况下,您可以尝试从外部移除()

在这种情况下,返回this等同于不返回任何内容。在此功能内,this会反转为窗口对象,因此closure()会变成this()

function outer() {
  var i = 0;
  i++;
  console.log(i);
  return this;
}

var closure = outer;
console.log(closure());
closure();
closure();
I get an error because unlike in the closure,
the function is not being returned here. So,
I modified it to the following ...