javavascript中的匿名函数,原型,闭包

本文深入探讨JavaScript中的匿名函数概念及其使用,解释原型在对象继承中的作用,以及闭包如何提供作用域保护和数据隐藏。通过实例解析这三者在实际编程中的应用和交互。
摘要由CSDN通过智能技术生成
     javavascript中的匿名函数,原型,闭包,我觉得是非常重要的东西,如果将这些掌握了,那么javascript的主要内容已经没有问题了,然后就是CSS的内容了。
   每一门学科或者技术或者其他区别于其他的第一点就是有自己的专业术语,专有的领域(现在很多都是综合性)还有就是解决问题的方法.
   对于专业术语,先认真学习,然后用自己的话去解释,所谓先认识,后解释,然后应用,应用的过程就是用它自己的一些方法在它的一些领域中解决一些问题。
   在网络盛行的今天,搜索引擎发挥了很大的作用,让每个人都能快速的获取知识和解决问题,如何快速的获取以及如何快速的解决问题,这对一个人来说应该是一种新的能力,而我一直在思考。
匿名函数
匿名函数就是一个没有具体名字的函数,还是通过例子去看吧。
在javascript中我们一般用下面的方式声明函数:
1,function double(x) { return 2 * x; }
2,var double = new Function('x', 'return 2 * x;');
3,var double = function(x) { return 2* x; }

 




从这三种方式可以看出,都有一个名称可以定位该函数,而匿名函数的声明跟这个是有区别的,如下:
(function(x, y){ alert(x + y); })(2, 3);
 
匿名函数可以最为自执行函数和回调函数中(如果用过JQuery和其他框架,可以看到很多)

闭包 

闭包是一个陌生的概念,用我自己的话就是在一个函数中又定义一个函数,并且将这个函数变量或者名称返回(当然也可以不返回,通过this指定),返回后原来的函数所占的资源并不释放,可以说是激活状态,比较拗口,看下面的例子: 
function f1(){ 
    var n=999;<br>     function f2()<br>     {     <br>     alert(n);  <br>     }   <br> return f2;  <br> }  <br> var result=f1();  <br>result(); // 999

 

 
从这个函数就可以看到,在f1中,我们又定义了一个f2,然后将f2返回,返回后仍然可以访问定义在f1中的变量n,这也是闭包的一个作用,访问内部参数,如果里面对这个变量做了变化,那么访问的是这个变量的最终值。 

function buildList(list) { var result = []; for (var i = 0; i < list.length; i++) { var item = 'item' + list[i]; result.push(function () { alert(item + ' ' + list[i]) }); } return result; } function testList() { var fnlist = buildList([1, 2, 3]); for (var j = 0; j < fnlist.length; j++) { fnlist[j](); } } testList();
 上面的这个就是闭包的一个用法,当调用fnlist[j]()的时候弹出的都是item undefined,原因就是i在返回后已经变成了3,而list[3]是不存在的。 
原型 

原型其本质是一个对象,普通的实例对象没有本质上的区别。可以包含特定类型的所有实例的共享属性或者方法,每个JavaScript函数都有prototype属性,这个属性引用了一个对象,这个对象就是原型对象。原型对象初始化的时候是空的,我们可以在里面自定义任何属性和方法,这些方法和属性都将被该构造函数所创建的对象继承。 
下面的例子很直观的说明了这点。
function User(name,age){//构造方法 this.name = name;//对象属性 this.age = age;} User.prototype.addr = '湖北武汉';//在原型中添加属性 User.prototype.show = function(){//在原型中添加方法 alert(this.name+'|'+this.age); };var user1 = new User('ZXC',22);//创建实例 var user2 = new User('CXZ',21);user1.show();//调用show()方法user2.show(); alert(user1.show == user2.show);//返回 true 说明show方法是共享的alert(user1.addr);//'湖北武汉' alert(user2.addr);//'湖北武汉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值