为什么这个立即调用的方法返回窗口对象
Why does this immediately invoked method return the window object?
为什么立即调用的方法将window
对象返回为this
,
var o = {};
o.foo = function () {
console.log(this);
}(); //Window {…}
但是稍后执行时,该方法返回对象o
(正如我在这两种情况下所期望的那样(?
var o = {};
o.foo = function () {
console.log(this);
}
o.foo(); //Object {foo: function}
">
this"是在调用时定义的。变量赋值从右到左发生,因此在进行任何赋值之前调用该函数,因此"this"仍指全局窗口对象。
var o = {};
o.foo = function () {
console.log(this);
}(); //
这是全局上下文,这就是您看到窗口对象的原因。要让它显示您的o
对象,您需要将其绑定到o
对象。 this
是指当前上下文中的对象。当 window
对象不在任何其他上下文中时,this
的值始终保存该对象。
o.foo = function () {
console.log(this);
}.bind(o); //
演示:http://jsfiddle.net/X6cyr/1/
执行即时调用的函数表达式 (IIFE( 时:
... = (function () {
console.log(this);
}());
this的值不是由调用设置的,因此在输入函数时它是未定义的,因此设置为全局对象。在严格模式下,它将保持未定义状态。
如果你在对象定义体中执行console.log(this)
,默认情况下它将引用Window对象,因为你的对象在浏览器中不存在。所以你必须在定义对象后执行函数,这是我的演示http://jsfiddle.net/X6cyr/2/
相关文章:
- 从Javascript方法返回全局变量
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- AngularJS错误:提供程序必须从$get工厂方法返回值
- 修复AngularJS错误:提供程序必须从$get工厂方法返回值
- 从 javascript 中的对象方法返回一个对象
- 为什么我的Mongoose findAll方法返回500错误.
- 角度方法返回未绘制的代码
- 解析查询查找方法返回对象而不是数组
- Jquery Ajax调用没有't点击操作方法/返回整个HTML页面
- ajax方法返回错误时如何打印输出
- Meteor 方法返回客户端和服务器上的不同对象
- 如何将异步方法返回的值发送到javascript中的另一个异步方法
- Javascript getDay方法返回错误的数字
- Coffeescription类中的方法返回函数而不是字符串
- 当使用Q/promises/异步函数时,如何将一个值从一个类方法返回到另一个类
- find()方法返回具有不需要的属性的对象
- 如何在JSF中将toDataURL方法返回的画布内容作为图像存储在磁盘上
- 从请求.js请求方法返回结果
- jQuery的.children()方法返回'undefined'
- Angularjs 控制器在服务方法返回之前从服务中分配变量