重返jQuery(3)-函数

javascript的作用域是函数体,所有的操作都离不开函数。与函数有关的问题我想说的是三个感受,这三点是js所共有的,并不是jquery或前端开发独有的。在js做服务器的后端道理是一样的。

1.jquery是基于事件触发的。这很好理解,在web或者手机端都会用键盘,鼠标,触摸事件。这些事件是UI交互的基础。但是这里有个问题,事件交互时效性怎么保证呢?万一有一天NASA要开发一个APP安装在一个飞船上,保证10000000000000年以后,地外文明还可以使用怎么办? JavaScript通过回调函数,其实就是闭包来让这些交互事件放到页面上,不论你什么时候去操作,程序都可以响应。关于闭包看可以看重返jquery(1).

//比如下面这个函数,$(document).ready(),是外层函数
//function(){}这个是内层函数。通过这种方式形成一个闭包函数。
//这个结构,只要你不关掉网页,$("#switcher h3")可以一直恭候你的点击
$(document).ready(function() {
     $('#switcher h3').click(function() {
          $('#switcher button').toggleClass('hidden'); });
});
   ```

jquery中的闭包可以形成很多的闭包,怎么形容呢?看看下面这打地鼠的图


![th.jpeg](http://upload-images.jianshu.io/upload_images/2044710-4f3db2cb887bfa36.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/320)

闭包出现是在js变量回收机制前提下,对抗变量垃圾回收的一种解决办法。闭包函数可以一直保持变量状态,所以只要计算机还工作,web线程没关闭,这些闭包函数可以一直存在。 为了应对复杂的应用我们可以在页面中建很多闭包,就像打地鼠图中的地洞一样。一旦建好,虽然不知道什么时候那个洞会用上,但是他们会一直存在,等候你去打。事件响应机制是由闭包支持的。所以在jquery中闭包无处不在。

2.js单线程非阻塞机制。

javascript是单线程的,非阻塞的。这个概念困扰我很长时间。但是等我了解以后就发现这个机制其实很高明,效率大多数情况下都很高。
下面是我在另外一篇文章中对着问题的通俗解释
>js由于是单线程的模式,相当是一个饭馆只请了一个小二,这小二要负责所有用户的点餐,送餐和收钱的工作。所以不能在一个用户定了餐以后他就什么事也不干,等着饭好以后送给第一个客户,这样的模式下实际上主要的等待时间是等饭的准备,非常耗时间,在第一个客户订餐以后,小二记录下用户座位号码和点餐内容以后就可以去服务其他的顾客。当第一个客户的餐准备好了以后,恰好这时小二手头又没有其他工作的时候,他就会把第一个顾客的餐根据记录的座位号码送到顾客手中。当然第一个顾客先定,但是他可能不是第一个拿到餐,如果他定了一个比较耗时间的餐,比如红烧排骨,这个做起来比较复杂,第二个顾客定里一个凉拌黄瓜,这个简单,所以第二个顾客可能会先拿到凉拌黄瓜。

javascript就是用这个原理来解决单线程的效率问题。人还是一个人,但是在阻塞和非阻塞的情况下效率会差很多。 jquery中的回调函数就是解决这问题。 第一步相应事件-然后排队-第二步处理事件。

可以这么说:回调函数是jquery的灵魂。

3  jquery中的链式调用
jquery中的链式调用是效率非常高的方法。一开始尽管也可以用,但是还是不是太明白为什么可以这样操作。js的函数有个特点,在一个js函数调用的时候,总会附着(绑定)在一个对象上,关于这一点有点负杂,也是解开javascript this这个关键字的关键😀。我在下一篇会讲这个问题。  首先不管是绑定在哪个对象上,我们在jQuery中使用链式操作时要把链式操作的方法指向同一个对象。 那么怎么指向同一对象? 就用this这个关键字。 this的定义就是当前函数绑定的那个对象。那么好办了,我们只要在每个函数中都返货这个对象 
 var func= function(){
      return this;
 } 
这样后一个函数获得的对象就是前一个函数return 出来的this对象,这个对象是谁不重要。前后函数指向同一个对象的目的就达到了。


以上是我对jquery函数的一点理解。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    前端进阶之旅阅读 115,096评论 24 450
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 4,906评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 5,206评论 0 2
  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    前端进阶之旅阅读 16,743评论 18 503
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 12,048评论 2 19