日期:2014-05-16 浏览次数:20442 次
//普通函数 function box() { return 'Lee'; } alert(box()); //匿名函数 function () { //单独的匿名函数,是无法运行的 return 'Lee'; //就算能运行,也无法调用,因为没有名称 } //把匿名函数赋值给变量 var box = function () { return 'Lee'; }; alert(box()); //通过自我执行来执行匿名函数 (function () { //(匿名函数)(); 第一圆括号放匿名函数,第二个圆括号执行 alert('Lee'); })(); (function () { alert('Lee'); })(); //把匿名函数自我执行的返回值赋给变量 var box = (function () { return 'Lee'; })(); alert(box); //自我执行后用alert()打印 alert((function () { return 'Lee'; })()); //自我执行匿名函数的传参 (function (age) { alert(age); })(100); //函数里放一个匿名函数 function box() { return function () { // 闭包 return 'Lee'; } } alert(box()()); function box() { return function () { // 闭包 return 'Lee'; } } var b = box(); alert(b()); //通过闭包返回局部变量 function box() { var age = 100; return function () { return age; }; } alert(box()()); //使用全局变量进行累加 var age = 100; function box() { age++; } alert(age); box(); alert(age); box(); alert(age); //使用局部变量进行累加 function box() { var age = 100; age++; return age; } alert(box()); alert(box()); alert(box()); alert(box());alert(box()); //使用匿名函数实现局部变量驻留内存中从而累加 function box() { var age = 100; return function () { age++; return age; }; } var b = box(); alert(b()); alert(b()); alert(b()); alert(b()); //alert(age); b = null; //解除引用,等待垃圾回收 alert(b()); //循环里的匿名函数的取值问题 function box() { var arr = []; for (var i = 0; i < 5; i ++) { arr[i] = function () { //arr[0] = 0,arr[1] = 1 .... arr[4] = 4 return i; }; } //循环已经执行完毕了,i最终是4++ = 5 ,那么最终就是5 return arr; } //alert(box()[0]); var b = box(); //alert(b.length); for (var i = 0; i < 5; i ++) { alert(b[i]()); } //改0 function box() { var arr = []; for (var i = 0; i < 5; i ++) { arr[i] = i; } return arr; } var b = box(); for (var i = 0; i < 5; i ++) { alert(b[i]); } //改1 function box() { var arr = []; for (var i = 0; i < 5; i ++) { arr[i] = (function (num) { //通过自我及时执行匿名函数 return num; })(i); } return arr; } var b = box(); for (var i = 0; i < 5; i ++) { alert(b[i]); } //改2 function box() { var arr = []; for (var i = 0; i < 5; i ++) { arr[i] = (function (num) { //num其实在这里 return function () { //因为闭包可以将变量驻留在内存中,和上一节课的累加是一个道理 return num; } })(i); } //已经执行完毕了,num为什么可以0,1,2,3,4 return arr; } var b = box(); for (var i = 0; i < 5; i ++) { alert(b[i]()); } var b = function () { alert('Lee'); }(); function box() { var arr = []; for (var i = 0; i < 5; i ++) { arr[i] = function (num) { return function () { //因为闭包可以将变量驻留在内存中,和上一节课的累加是一个道理 return num; } }(i); } //已经执行完毕了,num为什么可以0,1,2,3,4 return arr; } var b = box(); for (var i = 0; i < 5; i ++) { alert(b[i]()); } //关于this对象 var box = { getThis : function () { return function () { return this; } } }; alert(box.getThis()()); var user = 'The Window'; var box = { user : 'The Box', getUser : function () { //这里作用域的this是Box var that = this; return function () { //这里作用域的this是window return that.user; } } }; //alert(box.getUser()()); //对象冒充 //alert(box.getUser().call(box)); alert(box.getUser()()); function box() { var oDiv = document.getElementById('oDiv'); var text = oDiv.innerHTML; oDiv.onclick = function () { alert(text); }; oDiv = null; //解除引用,等待垃圾回收 alert(oDiv); } box(); //块级作用域(私有作用域) function box() { for (var i = 0; i < 5; i ++) { //块级作用域(JS没这个东西) } alert(i); } box(); function box() { for (var i = 0; i < 5; i ++) { //块级作用域(JS没这个东西) } var i = 111; //就算重新声明,也不会影响之前声明初始化的数据 alert(i); } box(); //使用块级作用域(私有作用域) function box() { (function () { //包含自我执行的匿名函数,就可以实现私有作用域 for (var i = 0; i < 5; i ++) { alert(i); } // 这里面用了a,b,c等变量 })(); 被销毁了 //这里可以继续似乎用a,b,c等变量,和上面的a,b,c完全没有联系 //出了这个私有作用域,变量立即被销毁 alert(i); //这里就不认识了 } box(); //全局变量 var age = 100; alert(age); age = null; //私有作用域来表示 (function ()