这是如何在嵌套函数中工作的
How this works within nested functions
我有下面的代码片段。
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
我对这个代码片段有几个问题。
- 把嵌套函数放在外部函数里面的想法是什么?这对现实生活中的代码有什么好处呢?
- 我也在与"this"关键字作斗争,我一直认为"this"代表全局上下文,所以我对它如何在外部函数中工作而不是在内部函数中工作感到困惑。
你的问题中有两个不同的概念:
-
this
关键字 - 闭包。
在闭包中使用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
。
strict
模式会发生什么?window.foo = 'window foo';
会发生什么?也许你可以通过这个来理解javascript中的"this"。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this相关文章:
- onmouseout函数工作不正常
- 我无法使onmouseout函数工作
- Javascript”;结束”;函数工作不稳定
- HTML JavaScript,我如何能够通过给每个元素一个不同的Id来使用JavaScript使这个函数工作
- Javascript:onclick函数工作一次,页面就会恢复到原来的状态
- jQuery toggle()函数工作不正常
- Node.js npm opn-can't使回调函数工作
- 添加两个数字的JavaScript函数工作不正常
- 调用在Jquery中未作为链接函数工作
- 将PHP变量传递给Javascript不能通过PHP函数工作(与全局变量无关)
- 为什么我需要在 javascript 函数工作之前按提交按钮 2 次
- 使 JavaScript 函数工作时遇到麻烦
- 如何使 clearInterval 函数工作
- 如何使 then 函数工作
- 如何让我的包含函数工作
- Promise.all 不应该作为传递给 .then 的函数工作
- 我无法让它作为 JavaScript 函数工作(我在控制台时得到我想要的返回值.log但我不能将其作为函数调用)
- JavaScript on change 函数工作得不好
- jquery next()函数工作不正常
- Jquery hasClass()函数工作不正常