这是如何在嵌套函数中工作的

How this works within nested functions

本文关键字:函数 工作 嵌套      更新时间:2023-09-26

我有下面的代码片段。

var myObject = {
    foo: "bar",
    func: function() {
        var self = this;
        console.log("outer func:  this.foo = " + this.foo);
        console.log("outer func:  self.foo = " + self.foo);
        (function() {
            console.log("inner func:  this.foo = " + this.foo);
            console.log("inner func:  self.foo = " + self.foo);
        }());
    }
};
myObject.func();

,结果如下。

outer func:  this.foo = bar
outer func:  self.foo = bar
inner func:  this.foo = undefined
inner func:  self.foo = bar

我对这个代码片段有几个问题。

  1. 把嵌套函数放在外部函数里面的想法是什么?这对现实生活中的代码有什么好处呢?
  2. 我也在与"this"关键字作斗争,我一直认为"this"代表全局上下文,所以我对它如何在外部函数中工作而不是在内部函数中工作感到困惑。

你的问题中有两个不同的概念:

  1. this关键字
  2. 闭包。

在闭包中使用this会让很多人感到困惑。

将嵌套函数放入外部函数的想法是什么?这对现实生活中的代码有什么好处呢?

关于闭包有很好的文档。如果您不熟悉闭包,要点是它记住定义函数的环境。

self.foo返回正确值

应用程序大多是函数式编程/柯里化。

。闭包内的self.foo确实返回正确的值,但您不必将值传递给函数。

我也在与'this'关键字作斗争,我一直认为'this'代表全局上下文,所以我对它如何在外部函数中工作而不是在内部函数中工作感到困惑。

在这段代码中:

   (function() {
        console.log("inner func:  this.foo = " + this.foo);
        console.log("inner func:  self.foo = " + self.foo);
    }());

我们使用的不是对象方法,而是一个简单的调用。因为您没有使用strict模式,所以this默认为全局对象。

另一部分:

    console.log("outer func:  this.foo = " + this.foo);
    console.log("outer func:  self.foo = " + self.foo);

我们在对象方法内部;this指对象myObject

<标题> exercices h1> li>如果在闭包内使用strict模式会发生什么?
  • 如果你事先做window.foo = 'window foo';会发生什么?
  • 也许你可以通过这个来理解javascript中的"this"。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this