Chinaunix首页 | 论坛 | 博客
  • 博客访问: 157400
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 399
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-23 11:47
个人简介

程序猿啊程序猿

文章分类

全部博文(42)

文章存档

2016年(28)

2015年(14)

我的朋友

分类: JavaScript

2016-04-19 16:48:19

1、JS函数作为方法来调用
/* getNameFunc为对象的一个方法*/
  var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
        return this.name;
    }
  };
  alert(object.getNameFunc());

 一、getNameFunc方法是一个函数。函数属于对象。object是函数所有者。
二、name是对象的属性。


2、JS闭包概念
一、理解闭包,就要先了解变量的作用域,变量分为局部变量和全局变量。
局部变量只能在函数内部调用,函数外部无法调用函数内部变量。
全局变量在函数内外部都可以调用。
二、如何从外部读取函数内部变量,就要用到闭包了,栗子如下:
1、function f1(){
    var n=999;
    function f2(){
      alert(n); 
    }
    return f2;
  }
  var result=f1();
  result(); // 999

2、 function f1(){
    var n=999;
    nAdd=function(){n+=1}
    function f2(){
      alert(n);
    }
    return f2;
  }
  var result=f1();
  result(); // 999
    result(); //999
  nAdd();
  result(); // 1000
    nAdd();
    nAdd();
    result();//1002
分析如下:
一、函数result()就是闭包函数,函数f1()是nAdd()的父函数,而f1()被赋予了一个全局变量,所以n就会一直在内存中
二、需要注意的一点是nAdd前面没有var,所以它是全局变量,在result()执行之前,它是没有被写入内存的。
三、个人理解:闭包是可以读取其他函数内部变量的函数,它是连接函数内部和外部的桥梁。
四、闭包的用处:闭包可以读取函数内部的变量,闭包可以让这些变量始终保存在内存中
PS:闭包会让函数的变量保存在内存中,所以内存消耗会很大,不能滥用闭包。

3、两个闭包栗子的分析:

var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      return function(){
        return this.name;
      };
    }
  };
    // var result=object.getNameFunc();
    // alert(result());
  alert(object.getNameFunc()());
结果为“The Window"


var name = "The Window";
  var object = {
    name : "My Object",
    getNameFunc : function(){
      var that = this;
      return function(){
        return that.name;
      };
    }
  };
  alert(object.getNameFunc()());
结果为:"My object"

分析如下:
一、栗子1中注释掉的result()等价于object.getNameFunc()();result的返回值为this.name,是全局对象window的一个属性,因为之前已经var name="The Window"。
二、栗子2中var that=this,this代表了对象object,所以that.name等价于object.name.

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