是以这段代码我们存眷的部分只有:
- (function(){
- console.log(this.x);
- })();
与通俗函数调用一样,创建一个虚拟高低文对象,然后通俗函数作为这个虚拟高低文对象的办法急速调用,匿名函数中的 this 也就指向了这个虚拟高低文。

- var x = 1;
- function getX(){
- console.log(this.x);
- }
- getX();
参数中的this
- var x = 1;
- var foo = {
- x: 2,
- getX: function(){
- console.log(this.x);
- }
- }
- setTimeout(foo.getX, 1000);
函数参数是值传递的,是以膳绫擎代码等同于以下代码:
- var getX = function(){
- console.log(this.x);
- };
- setTimeout(getX, 1000);
然后我们又回到了通俗函数调用的问题。
大年夜上图中,我们可以看出getX办法的调用者的高低文是foo,是以getX办法中的 this 指向调用者高低文foo,转换成 call 办法为foo.getX.call(foo)。
全局中的 this 指向全局的高低文
- var x = 1;
- console.log(this.x);

- var x = 1;
- var a = {
- x: 2,
- b: function(){
- return function(){
- return function foo(){
- console.log(this.x);
- }
- }
- }
- };
- (function(){
- var x = 3;
- a.b()()();
- })();
看到膳绫擎的情况是有很多个函数,但我们只须要存眷 this 地点函数的调用方法,起首我们来简化一下如下:

网友点评
精彩导读
科技快报
品牌展示