匿名函数和闭包

来源:互联网 发布:linux开机过程 编辑:程序博客网 时间:2024/05/16 09:48

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();

}

}







原创粉丝点击