匿名函数和闭包

1. 匿名函数

alert((function() {return "Lee";})());  //使用()匿名函数直接调用

(function(age) {

return age;

})(100);

function box() {

return function() {

return "Lee";

}

}

2. 闭包

function box () {

var age = 100;

return function () {

return age;

}

}

alert(box()());   //通过闭包访问局部变量。局部变量驻留在内存中。

3. 循环里的匿名函数的取值问题

function box() {

var arr = [];

for (var i=0; i<5; i++) {

arr[i] = function() {

return i;     //匿名函数中的i都会是5, 通过匿名函数自我及时执行解决这个问题。

}

}

return arr;

}


function box() {

var arr = [];

for (var i=0; i<5; i++) {

arr[i] = (function(number) {

return number;           通过匿名函数及时自我执行解决这个问题。

})(i);

}

return arr;

}


function box() {

var arr = [];

for (var i=0; i<5; i++) {

arr[i] = (function(number) {

return function() {return number};

})(i);

}

return arr;

}

4. 闭包中使用this对象

闭包中的this对象指向window

var box = {

getThis: function () {

return function() {return this;}   //这里的this指向window

}

}


var box = {

getThis: function () {

var that = this;

return function() {return that;}   //先把this作用域保存给that变量,再使用that操作box作用域下的变量。

}

}

5. 内存泄漏

闭包应该避免内存泄漏

6. 模仿块级作用域

javascript没有块级作用域, if else, for不会产生块作用域

function box() {

(function () {

for (var i=0, i<5; i++){

}

})();

}


(function() {

var a,b,c;    //防止变量名字冲突

})();

7. 私有变量

function Box(){

var age = 100;    

var run = function () {

return age;

}

this.publicRun = function () {   //私有变量无法访问,定义个公共接口访问

return age + run();

}

}

8. 模块模式

var box = function() {

var user = "Lee";

function run () {

return '"running..";

}


return {

publiGo: function () {

return user + run();

}

}

}

9. 增强的模块模式

function Desk() {

}

var box = function() {

var user = "Lee";

function run () {

return '"running..";

}


var desk = new Desk();

desk.publicGo = function () {

return user + run();

}

}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值