重新看了下闭包,在javascript高级程序设计第二版里的闭包里有如下例子,例子中介绍说匿名函数的执行环境具有全局性和this指向window,对于这句话很费解,所以就想个方法验证下。

var name = "The Window";
      var object = {
        name : "My Object",
        getNameFunc : function(){
          return function(){
            return this.name;
          };
        }
      };
      alert(object.getNameFunc()());输出 The Window

一.匿名函数的执行环境具有全局性,因此其this对象通常指向window,也可以称的上是window对象的方法的验证

var a = 100;
      (function  () {
          console.log(a);
          console.log(this.a);
          console.log(window.a);
      })()
输出
100
100
100
(function  () {
          this.a = 200;
      })();

       console.log(window.a);
       console.log(this.a);
       console.log(a);

输出
200
200
200

上面两个例子验证了匿名函数的上下文环境是window

二.将闭包的题改一下来验证匿名函数的this

var object = {
        name : "My Object",
        getNameFunc : function(){
          return function(){
                   if (this===window)
                       {return "匿名函数的上下文环境是window";}
                   else
                       {return "匿名函数的上下文环境不是window";};
           
          };
        }
      };
      alert(object.getNameFunc()());

//输出  匿名函数的上下文环境是window

三.下面是从网上看的一篇文章上的代码

function foo() {

    if (this===window) {
        document.write("call a function");
    }
    else{
        document.write("call a function or method");
    }
    }

    function MyObject(name) {
        // 下面的this指代new关键字新创建实例
        this.name = name;
        this.foo = function(){
            document.write("call a method, by object: ", this.name, " ; and then ");
            foo();
        };
    }

    var obj1 = new MyObject("obj1");
    var obj2 = new MyObject("obj2");

    // 测试1: 作为函数调用
    foo();        //Output=>call a function.

    // 测试2: 作为对象方法的调用
    obj1.foo();    //Output=>call a method, by object: obj1 ; and then call a function.
    obj2.foo();    //Output=>call a method, by object: obj2 ; and then call a function.

    // 测试3: 将函数作为“指定对象的”方法调用
    foo.call(obj1);    //Output=>call a function or method.
    foo.apply(obj2);    //Output=>call a function or method.

全局foo()函数也是方法,它其实是其上下文环境(window)的方法

参考:

http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html

http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/

匿名函数里的this的执行环境和指向--javascript的更多相关文章

  1. python 匿名函数捕获变量值 (执行时的值)

  2. Javascript的匿名函数与自执行

    1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没有函数名的函数. 1.1 函数的定义,首先简单介绍一下函数的定义,大致可分为三种方式 第一种: ...

  3. Javascript 函数及其执行环境和作用域

    函数在javascript中可以说是一等公民,也是最有意思的事情,javascript函数其实也是一个对象,是Function类型的实例.因此声明一个函数首先可以使用 Function构造函数: va ...

  4. JavaScript基础---作用域,匿名函数和闭包

    匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...

  5. JavaScript基础---作用域,匿名函数和闭包【转】

    匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数. 一.匿名函数 //普通函数 function box() { //函数名是 box return 'TT'; } //匿名函数 f ...

  6. 第一百一十节,JavaScript匿名函数和闭包

    JavaScript匿名函数和闭包 学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂 ...

  7. 浅谈JavaScript匿名函数与闭包

    一. 匿名函数   //普通函数定义: //单独的匿名函数是无法运行的.就算运行了,也无法调用,因为没有名称. 如: function(){             alert('123');    ...

  8. JavaScript(第十五天)【匿名函数和闭包】

      学习要点: 1.匿名函数 2.闭包 匿名函数就是没有名字的函数,闭包是可访问一个函数作用域里变量的函数.声明:本节内容需要有面向对象和少量设计模式基础,否则无法听懂.(所需基础15章的时候已经声明 ...

  9. javascript 作用域链及闭包,AO,VO,执行环境

    下面的文章内容会根据理解程度不断修正. js变量作用域: 定义:变量在它申明的函数体以及函数体内嵌套的任意函数体内有定义. function AA(){ var bb='我是AA内部变量'; func ...

随机推荐

  1. 【转】bootstrap 的 affix.js 插件

    我觉得 Twitter Bootstrap 提供的 JavaScript 插件可用性非常高,但文档多数简单.按部就班操作了,有效果当然好,没效果的话简直不知道为什么.之前我写过 Scrollspy 用 ...

  2. JSP标准标签库(JSTL)--JSTL简介与安装

    对于MVC设计模式来讲,我们一直强调,在一个JSP钟scriptlet代码越少越好,但是只靠以前的概念很难实现,因为标签的开发特别麻烦,所以为了简化标签,也为了让标签更具备一些通用性,所以一般在开发中 ...

  3. 使用Word API打开Word文档 ASP.NET编程中常用到的27个函数集

    使用Word API(非Openxml)打开Word文档简单示例(必须安装Word) 首先需要引入参照Microsoft.Office.Interop.Word 代码示例如下: public void ...

  4. 关于Tcpreplay

    tcpprep -p -o /root/Desktop/ZS/Tcpreplay/cache_test.cache -i /root/Desktop/ZS/Tcpreplay/9.17.pcap tc ...

  5. JSON & XML 简析

    转载自:http://my.oschina.net/aofe/blog/269260 JSON: XML: JSON格式说明: HTML & XML 的对比 HTML: XML: HTML5新 ...

  6. jdb 调试

    C:\Users\Reverse>adb shell am start -D -n lwf.lc.pncdd/lwf.lc.pncdd.MainC 查看内存情况: cat /proc/N/map ...

  7. (转)windows上virtualenv 安装及使用

    [注意]要在某个含有空格的目录下面创建virtualenv环境,就要安装 win32api . 原文地址:http://blog.csdn.net/liuchunming033/article/det ...

  8. [Java]读取文件方法大全(转)

    [Java]读取文件方法大全   1.按字节读取文件内容2.按字符读取文件内容3.按行读取文件内容 4.随机读取文件内容 public class ReadFromFile {     /**     ...

  9. StarUML---推荐一款UML工具(很好很强大)

    转自:http://www.cnblogs.com/daizhj/archive/2008/04/14/1153121.html 上周我的一个朋友,同时也是目前公司的同事给我推荐了一款UML工具,开始 ...

  10. php 设计模式系列(一)

    参考文章:http://duchengjiu.iteye.com/blog/2227452 多态代码 // 多态, 在JAVA中是这样用的, 其实在PHP当中可以自然消除, 因为参数是动态的, 你传什 ...