Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7170155
  • 博文数量: 3857
  • 博客积分: 6409
  • 博客等级: 准将
  • 技术积分: 15948
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-02 16:48
个人简介

迷彩 潜伏 隐蔽 伪装

文章分类

全部博文(3857)

文章存档

2017年(5)

2016年(63)

2015年(927)

2014年(677)

2013年(807)

2012年(1241)

2011年(67)

2010年(7)

2009年(36)

2008年(28)

分类: JavaScript

2013-06-21 13:17:48

二、this指针:[P83]

在这里列出this在ECMAScript中的不同含义:

(1) 在全局执行环境中使用this,表示Global对象,在浏览器中就是window对象。

(2) 当在函数执行环境中使用this时,情况就有些复杂了。如果函数没有明显的作为非window对象的属性,而只是定义了函数,不管这个函数是不是定义在另 一个函数中,这个函数中的this仍然表示window对象。如果函数显示地作为一个非window对象的属性,那么函数中的this就代表这个对象。 (当然可以使用apply或者call函数来取代默认this的引用,详见[P88])

(3) 当通过new运算符来调用函数时,函数被当做一个构造函数,this指向构造函数创建出来的对象。
参考:
《JavaScript基础与案例开发详解》清华大学出版社
    


点击(此处)折叠或打开

  1. 1    function f(x) {
  2. 2     var g = function () { return x; }
  3. 3     return g;
  4. 4    }
  5. 5    var g1 = f(1);
  6. 6    alert(g1()); //输出 1

  7. 假设我们把全局看成类似以下这样的一个大匿名函数:
  8. 1    (function() {
  9. 2     //这里是全局范围
  10. 3    })();

  11. 那么例子就可以看成是:
  12. 1    (function() {
  13. 2     function f(x) {
  14. 3     var g = function () { return x; }
  15. 4     return g;
  16. 5     }
  17. 6     var g1 = f(1);
  18. 7     alert(g1()); //输出 1
  19. 8    })();



    全局的大匿名函数被定义的时候,它没有外层,所以它的作用域链是空的。
    全局的大匿名函数直接被执行,全局的作用域链里只有一个 '全局调用对象'。
    函数 f 被定义,此时函数 f 的作用域链是它外层的作用域链,即 '全局调用对象'。
    函数 f(1) 被执行,它的作用域链是新的 f(1) 调用对象加上函数 f 被定义的时候的作用域链,即 'f(1) 调用对象->全局调用对象'。
    函数 g (它要被返回给 g1,就命名为 g1吧)在 f(1) 中被定义,它的作用域链是它外层的函数 f(1) 的作用域链,即 'f(1) 调用对象->全局调用对象'。
    函数 f(1) 返回函数 g 的定义给 g1。
    函数 g1 被执行,它的作用域链是新的 g(1) 调用对象加上外层 f(1) 的作用域链,即 'g1 调用对象->f(1)调用对象->全局调用对象'。


阅读(533) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~