/* 闭包的定义:一个内部函数里变量作用域生命周期延续,直接访问一个函数里面的私有属性 闭包的作用:解决变量作用域延续的问题,同时解决全局变量冲突的问题 */ //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); //小结:关于闭包的用法,以后有空再整理出来
时间: 2024-10-11 04:20:22