//普通函数
function box(){
return 'Lee';
}
alert(box());
//匿名函数
function (){ //单独的匿名函数,是无法运行的
return 'Lee'; //就算能运行,也无法调用,因为没有名称
}
//把匿名函数赋值给变量
var box = function(){
return 'Lee';
};
alert(box());
//通过自我执行来执行匿名函数
(function(){
alert('Lee');
})();
//把匿名函数自我执行的返回值赋值给变量
var box = (function(){return 'Lee';})();
alert(box);
//自我执行匿名函数的传参
(function (age){ alert(age);})(100);
//函数里放一个匿名函数
function box(){
return function(){ // 闭包
return 'Lee';
}
}
alert(box()());
//通过闭包返回局部变量
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;
return function(){
age++;
return age;
}
}
alert(box()());//101
var b = box();
alert(b()); //101
alert(b()); //102
alert(b()); //103
b= null; //解除引用,等待垃圾回收
//循环里面的匿名函数的取值问题
function box(){
var arr=[];
for(var i=0; i<5; i++){
arr[i]=function(){
return i;
};
}
return arr;
}
//alert(box()[0]);
var b = box();
for(var i=0; i<5; i++){
alert(b[i]()); //循环已经执行完毕了,i最终是4++=5,那么最终就是5
}
//改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){
return function(){ //因为闭包可以将变量驻留在内存中
return num;
};
})(i);
}
return arr;
}
var b = box();
for(var i=0; i<5; i++){
alert(b[i]());
}
//改3
function box(){
var arr=[];
for(var i=0; i<5; i++){
arr[i] = function(num){ //赋给一个变量的话,自我执行可以去掉圆括号
return function(){ //因为闭包可以将变量驻留在内存中
return num;
};
}(i);
}
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()()); //返回[object Window]
var user = 'the window';
var box = {
user:'the box',
getUser:function(){
return this.user;
}
}
alert(box.getUser());//the box
----------------------------------------------
var user = 'the window';
var box = {
user:'the box',
getUser:function(){
//这里作用域的this是Box
return function(){ //闭包在运行时时指向window的,因为闭包并不属于这个对象的属性或方法
//这里作用域的this是window
return this.user;
}
}
}
alert(box.getUser()());//the window
//对象冒充
alert(box.getUser().call(box));//the box
var user = 'the window';
var box = {
user:'the box',
getUser:function(){
//这里作用域的this是Box
var that = this;
return function(){ //闭包在运行时时指向window的,因为闭包并不属于这个对象的属性或方法
//这里作用域的this是window
return that.user;
}
}
}
alert(box.getUser()());//the box
function box(){
var oDiv = document.getElementById('oDiv');
var text = oDiv.innerHTML;
oDiv.onclick = function(){
alert(text); //oDiv用完之后一直驻留在内存中,这里用oDiv导致内存泄漏
}
oDiv = null;//解除引用,等待垃圾回收
}
box();
// 块级作用域(私有作用域)
function box(){
for(var i=0;i<5;i++){
}
alert(i);
}
box();
function box(count){
for(var i=0;i<count;i++){}
var i; //就算重新声明,也不会覆盖前面的值
alert(i);
}
box(2);
function box(){
(function(){ //包含自我执行的匿名函数,就可以实现私有作用域
for(var i=0;i<5;i++){
alert(i);
}
})(); //出了这个私有作用域,i被销毁了
alert(i); //这里就不认识i了
}
box();
(function(){
//这里就是全局的私有作用域
var age = 100;
alert(age);
})();
alert(age); //age is not defined
//私有变量
function box(){
var age = 100; //私有变量,外部无法访问
}
function Box(){
this.age = 100; //属性,公有的
this.run = function(){ //方法,公有的
return '运行中...';
};
}
var box = new Box();
alert(box.age);
alert(box.run())
function Box(){
var age = 100; //私有变量
function run(){ //私有方法
return '运行中 ...';
}
this.publicGo = function(){ //对外可见的公共接口,特权方法
return age + run();
};
this.getAge = function(){
return age;
}
}
var box = new Box();
//alert(box.age); //undefined
//alert(box.run()); //box.run is not a function
alert(box.publicGo());
alert(box.getAge());
//通过构造函数传参
function Box(value){
var user = value; //私有变量
this.getUser = function(){
return user;
};
this.setUser = function(value){
user = value;
};
}
var box = new Box('Lee');
alert(box.getUser());
box.setUser('ooo');
alert(box.getUser());
//静态属性
(function(){
var user='';
Box = function(value){
user = value;
};
Box.prototype.getUser = function(){
return user;
};
Box.prototype.setUser = function(value){
user = value;
};
}
)();
var box = new Box('Lee');
alert(box.getUser());
var box2 = new Box('KKK');
alert(box.getUser());
box2.setUser('ooo');
alert(box.getUser());
var box = function(){
var user = 'Lee'; //私有变量
function run(){ //私有函数
return '运行中...';
}
return{
publicGo:function(){
return user + run(); //对外公共接口的特权方法
}
};
}();
alert(box.publicGo());
var box = function(){
var user = 'Lee'; //私有变量
function run(){ //私有函数
return '运行中...';
}
var obj={
publicGo:function(){
return user + run(); //对外公共接口的特权方法
}
};
return obj;
}();
alert(box.publicGo());
function Desk(){
}
var box = function(){
var user = 'Lee'; //私有变量
function run(){ //私有函数
return '运行中...';
}
var desk = new Desk();
desk.publicGo = function(){
return user + run();
};
return desk;
}();
alert(box.publicGo());
Javascript匿名函数和闭包
最新推荐文章于 2024-08-25 19:13:29 发布