您的位置:首页 > Web前端 > JavaScript

js闭包初体验

2015-09-20 19:54 513 查看
/*
闭包的定义:一个内部函数里变量作用域生命周期延续,直接访问一个函数里面的私有属性
闭包的作用:解决变量作用域延续的问题,同时解决全局变量冲突的问题
*/

//1、定义内部函数,私有函数
function sum(){ //函数是一种数据类型
var a = 100;
//内部函数
function get(){
return a;
}
return get;
}

var count = sum();  //返回的是一种function的数据类型

/*
2.闭包的第二种形态:回调函数,属性和方法的外调,
插件开发中常用,比如经典的jQuery,大公司需要开发的插件等等
*/

function tzEvent(id,event,callback){
var title = "我是一个窗口哦!";
document.getElementById(id)["on"+event] = function(){
console.log(this.innerHTML);
if(callback) callback(title);
};
}

tzEvent("btn","click",function(title){
console.log(title);
});

//3.function是一种数据类型,在调用()的时候编译和运行函数体的内容
function test(){
var arr = [];
for(var i=0;i<3;i++){
/*
小小作用域,会把function赋值给arr,
但是i值不会return,因为没有被调用
而且i的值最后的结果会被牵引约束
*/
arr[i] = function(){
return i;
}
}
return arr;
}

var arr1 = test();
console.log(arr1[0]()+"---"+arr1[1]()+"---"+arr1[2]());
//结果是  3---3---3 具体运行过程可以再谷歌浏览器控制台debug

/*4.闭包最好的表现形式,是一个及时函数
解决一个全局变量互相牵引或者约束的行为

定义变量,难免会重名,在开发中除非
万不得已的情况是不允许使用全局变量的,
即使使用也需要定义特殊的名字,防止全局污染
*/
(function(b){
var a = 100;
console.log(a+"==="+b)
})(200);

//小结:关于闭包的用法,以后有空再整理出来


  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: