1、了解闭包(closure)必须知道,javascript的作用域(scope)问题:
javascript的作用域问题,即变量(函数-内部函数)的作用域问题。根据javascript的语法规则,变量(函数)声明在外部即视为全局变量(函数),可以直接在任何地方调用。
我们常用的变量分为全局变量和局部变量,而局部变量只能在函数内部调用。要实现外部调用局部变量的方法就会涉及到跨域问题,因此使用javascript的闭包函数来加以解决。
这里有几种关于变量作用域的调用写法:
(1)、改变全局变量
var name="peaty"; function getName(){ name='shine'; } getName();//shine
(2)、调用函数内部变量
function number(){ var num=2;} number(num);//undified
(3)、函数内部也有全局变量--javascript语法原则(无var 声明的变量视为全局变量)
function say(){var s="you";} say(); alert(s);//you
2、什么是javascript的闭包原则:
闭包原则就是把一些变量封装起来,与外部函数建立一个依赖,在全局变量与局部变量之间搭建桥梁,使外部可以轻松地访问到局部变量的函数或对象表达式。
3、使用闭包的目的
一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
这样做就可以协调我们有些数据作为全局变量来控制,将一些有必要不清理的数据临时保存起来。
4、闭包函数的写法
(1)、作为内部函数实现闭包 function fun(){ var n=0; nAdd=function(){n+=1} function fun2(){ alert(n); } return fun2; } var result=fun(); result();//0 nAdd(); result();//1,对于fun2而言fun的所有属性均可见
5、闭包的运行原理
var name = "xxx"; var object = { name : "My Object", getNameFunc : function(){ var that = this;//上下文对象,全局化 return function(){ return that.name;//实现修改局部变量转换为全局变量 }; } }; alert(object.getNameFunc()());