如何在即时函数中使用“this”
How to use "this" inside an immediate function
我正在尝试将我的代码封装在一个即时函数中,稍后将通过全局变量 x 访问该函数并充当"模块"。
法典:
var x = (function () {
console.log(x); // undefined
console.log(this); // undefined
})();
但我不明白为什么我不能用this
来指代函数本身。
编辑:
即时函数在严格模式下的另一个函数内 ( "use strict"
)
当一个函数在一个函数内执行,或者作为回调传递给另一个在严格模式下处理的函数时,会发生一件有趣的事情
这是一个演示,并观看控制台
function foo(){
'use strict';
(function(){
//undefined in strict mode
console.log('in foo, this is: '+this);
}());
}
function bar(){
(function(){
//DOMWindow when NOT in strict mode
console.log('in bar, this is: '+this);
}());
}
foo();
bar();
因此,如果该代码在另一个处于严格模式的函数中作为回调执行,则this
不会引用全局window
,而是undefined
。
不能使用"this"来指代函数本身。"this"指向对象内部对象的实例。
自执行函数(即时函数)仅在运行时提供执行上下文。 x 将始终是未定义的,因为在您的代码中,它被分配了即时函数的结果,并且由于它返回的任何内容,因此 x 是未定义的。
这不应该是未定义的,在匿名函数中它会引用 DOMWindow 对象,您看到的未定义只是匿名函数的结果。
如果你想要一个"模块"或类这样的行为,那么只需
var x = function() {
console.log(x, this);
};
会像使 X 成为构造函数一样,然后您可以使用 prototype 属性使用要继承的属性扩展对象。
x.prototype.foo = function() {
}
this
是函数所有者。 而不是函数本身。
顺便说一下,您报告的输出是不连贯的:
console.log(this); // DOMWindow
演示
这是因为immediate function
的所有者是全局对象 - window
。
如前所述,this
并不总是DOMWindow
对象,但它仍然不能undefined
!
你不应该在直接的 anon func 中使用this
,这是没有意义的。 this
建议稍后使用创建的对象,即时函数具有相反的目的 - 在执行后立即销毁其名称。在您的示例中,this
应引用全局对象,窗口。
- 在另一个函数中使用变量this
- JavaScript 中的嵌套函数和 “this” 关键字
- javascript中对象构造函数中的var属性与this.properties
- 函数中this和var之间的区别
- 在JavaScript类型的函数中避免self-this
- 如何使用(this)访问Angular 2 http rxjs catch函数中的对象属性
- jQuery使用ajax自动完成问题-TypeError:this.source不是函数
- 为什么在这种情况下,“This”确实充当javascript函数中的私有成员
- TypeError:this.getAttribute不是一个函数-javascript
- 可以't获取setInterval函数以使用javascript中的this.function_name调用另一
- `当使用箭头函数时,“开发工具”中未定义“this”
- 从另一个函数获得$this值
- 我收到此错误Uncatch TypeError:this.getElements不是一个函数
- 在函数中获取正确的作用域(不使用that=this)
- jQuery双对象构造函数-例如$($(this))
- Yii ajaxbutton : 如何在成功回调函数中获取 $(this)
- 如何在嵌套函数中获取$(this)
- Javascript:在函数外获取“this”
- 带参数的“this”函数
- 我可以在angularjs的$scope函数中写一个this函数吗?