一.匿名函数javascript
把匿名函数赋值给变量java
var box=function(){ return 'lee'; } alert(box());
经过表达式自我执行闭包
(function(){ return 'lee'; })();
把自我执行后的函数赋值给box;
var box=(function(){
return 'lee'; })();
alert(box);
二. 闭包函数
function box (){ return function(){ return 'lee'; } } alert(box()());
var b=box();
alert(b()); //更灵活一点
1.经过闭包返回局部变量 (使用闭包有一个优势和缺点 ,就是能够使局部变量驻留在原来的内存中)this
function box(){ var age=100; return function(){ return age; } } function box(){ var age=100; return function(){ age ++; return age; } } var b=box(); alert(b()); alert(b()); 从而实现累加
2.循环里面的匿名函数spa
function box(){ var arr=[]; for (var i = 0; i < 5; i++) { arr[i]=(function(num){ return num; })(i); } return arr; } alert(box());
function box(){prototype
var arr=[];
for (var i = 0; i < 5; i++) {
arr[i]=(function(num){ 驻留在做用域
return num;
})(i);
}
return arr;
}code
var box1=box();
for (var i = 0; i < 5; i++) {
alert(box1[i]);
}对象
3.Javascript 没有块级做用域(模仿块级做用域)blog
function box(){ var arr=[]; for (var i = 0; i < 5; i++) { } alert(i); 仍然能够调用i } box(); 包含自我执行的匿名行数 就能够使用块级做用域 私有域控制全局变量 function box(){ (function(){ for (var i = 0; i < 5; i++) { }})(); alert(i); } box(); //包含自我执行的匿名函数就能够实现块级做用域 每一个开发者能够使用本身的变量 不会搞坏全局变量 私有做用域 (function(){ var age=100; alert(age); })();
关于this对象
在闭包中this指向的是Window
var box ={ user:'abc', getUser:function(){
var that=this; return function(){ return this;
return that; } } } alert(box.getUser()()); object window
解决办法1.对象冒充 alert(box.getUser().call(box)); 不然会发生内存泄漏
解决办法办法2 var that=this
私有变量
function(){ var age=100; // 私有变量 } function Box(){ var age=100; function run(){ return "运行中"; } this.publicgo=function(){ //对外可见的公共接口 特权方法 ruturn age+run(); } this.getAge=function(){ return age; } } var box=new Box(); alert(box.getAge());
静态私有变量
共享不一样对象的属性,都能访问到被其余对象改变的值
(function(){ var user=' '; Box=function(value){ user=value; }//全局构造函数 Box.prototype.getUser=function(){ return user; } })(); var box=new Box('lll'); alert(box.getUser()); var box2=new Box('kkk'); alert(box.getUser());
单例 就是永远只实例化一次 其实就是字面量对象声明方式
var box={ user:'lll'; run:function(){ return " 运行中”; } }