回调函数

深入理解JS函数中this指针的指向

走远了吗. 提交于 2019-12-17 11:10:41
函数在执行时,会在函数体内部自动生成一个this指针。谁 直接调用 产生这个this指针的函数 ,this就指向谁。 怎么理解指向呢,我认为指向就是等于。例如直接在js中输入下面的等式: console.log(this===window);//true 情况不同,this指向的对象也不同。例如: 1. 函数声明的情况 var bj=10; function add(){ var bj=20; console.log(this);//window console.log(this.bj);//10 console.log(bj);//20 console.log(this.bj+bj);//30 } add(); window.add(); (1) 执行了add()之后,此时的this指向的是window对象,为什么呢?因为这时候add是全局函数,是通过window 直接调用 的。所以下面我专门写了个window.add()就是为了说明,全局函数的this都是指向的window。 (2) 就像alert()自带的警告弹窗一样,window.alert()执行之后也是一样的效果。所以只要是 window点 这种调用方式都可以省略掉,因此警告弹窗可以直接使用alert()。 2. 函数表达式 var bj=10; var zjj=function(){ var bj=30;

Node.js能解决什么问题?

戏子无情 提交于 2019-12-17 11:02:52
一、使用Node.js能解决什么问题 对于PHP、JAVA、Python等服务端语言中,为每个客户端连接创建一个新的线程,而每个线程需要大约2M的内存,理论上,具有8GB内存的服务器可以同时连接的最大用户数为4000个左右,要让Web应用程序支持更多的用户,就需要增加服务器的数量,这样硬件的成本就增加了。 服务器所支持的最大同时连接用户量是一个主要的瓶颈。 Node.js是一个用于开发各种Web服务器的开发工具,运行的是高性能的V8 JavaScript脚本语言, 什么是V8JavaScript? V8 JavaScript是由Google公司使用C++语言开发的一种高性能JavaScript,该引擎并不局限于在浏览器中运行。在V8引擎内部使用了一种全新的编译技术,高端的JavaScript脚本代码与开发者编写的低端的C语言具有非常相似的执行效率 二、Node.js的两种机制 非阻塞型I/O JavaScript的一个特点是它只支持单线程,因此不需要担心会造成死锁的现象。 与客户端脚本语言不同的是,Node.js中为V8 JavaScript提供了非阻塞型I/O机制。 例如,在访问数据库取得搜索结果的时候,在开始访问数据库之后、数据库返回结果之前,存在一段时间的等待。 在传统的单线程处理机制中,在执行了访问数据库的代码之后,整个线程都将暂停下来

C语言指针(五)--函数指针

夙愿已清 提交于 2019-12-17 05:49:33
在第四篇关于链表的文章中读者可以通过实现单向链表了解简单的指针应用。但是,在这之中出现了函数指针和空指针。在这篇文章中将对这两方面的内容做讨论。 说实话我现在我快崩溃了,这是我第三遍写这篇文章,前两遍都是在我正要发布的时候莫名其妙的没有啦。所以。。。。。。先提三个问题 1.定义一个函数指针,返回值为int参数为空。 2.定义一个函数指针,返回值int参数为int。 3.定义一个返回int指针的函数参数为int。 4.定义一个返回函数指针的函数参数为空,返回的函数指针参数和返回值都是int。 对于C语言基础较好的读者,前两个问题应该不成问题,但是第三个问题就不是所有读者都可以搞定了。 1. int ( * fun ) ( void ) ; 2 int ( * fun ) ( int ) ; 3. int * fun ( int prg ) { } 4. ? 我们观察前两个问题的答案,可能会发现函数指针的定义其实就是在函数定义的基础之上把函数名用括号括起来然后在函数名前加一个星号。 所以第四个问题的答案可能是这样的 int ( * fun ) ( int ) function ( void ) { } 可是我们观察第四个问题答案发现返回的指针并没有指针名所以应该把上面的定义改写成这样 int ( * fun ( void ) ) ( int ) {} 至于为什么是这样而不是这样 int

jQuery中Ajax $.ajax等

随声附和 提交于 2019-12-17 04:28:08
1. $.ajax()方法 参数对象属性如下: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。 timeout Number 设置请求超时时间(毫秒)。此设置将覆盖全局设置。 async Boolean (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。 beforeSend Function 发送请求前可修改 XMLHttpRequest 对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。 function (XMLHttpRequest) { this; // the options for this ajax request } cache Boolean (默认: true) jQuery 1.2 新功能,设置为 false 将不会从浏览器缓存中加载请求信息。 complete Function 请求完成后回调函数 (请求成功或失败时均调用)。参数:

服务器模型——从单线程阻塞到多线程非阻塞(中)

旧时模样 提交于 2019-12-16 23:54:48
https://blog.csdn.net/wangyangzhizhou/article/details/78899629 前言的前言 服务器模型涉及到线程模式和IO模式,搞清楚这些就能针对各种场景有的放矢。该系列分成三部分: * 单线程/多线程阻塞I/O模型 * 单线程非阻塞I/O模型 * 多线程非阻塞I/O模型,Reactor及其改进 前言 这里探讨的服务器模型主要指的是服务器端对I/O的处理模型。从不同维度可以有不同的分类,这里从I/O的阻塞与非阻塞、I/O处理的单线程与多线程角度探讨服务器模型。 对于I/O,可以分成阻塞I/O与非阻塞I/O两大类型。阻塞I/O在做I/O读写操作时会使当前线程进入阻塞状态,而非阻塞I/O则不进入阻塞状态。 对于线程,单线程情况下由一条线程负责所有客户端连接的I/O操作,而多线程情况下则由若干线程共同处理所有客户端连接的I/O操作。 单线程非阻塞I/O模型 多线程阻塞I/O模型通过引入多线程确实提高了服务器端的并发处理能力,但每个连接都需要一个线程负责I/O操作。当连接数量较多时可能导致机器线程数量太多,而这些线程大多数时间却处于等待状态,造成极大的资源浪费。鉴于多线程阻塞I/O模型的缺点,有没有可能用一个线程就可以维护多个客户端连接并且不会阻塞在读写操作呢?下面介绍单线程非阻塞I/O模型。 单线程非阻塞I/O模型最重要的一个特点是

NodeJS学习笔记五

拥有回忆 提交于 2019-12-16 22:57:19
Promise简介 所谓Promise,就是一个对象,用来传递异步操作的消息。 Promise对象有以下两个特点。 (1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称Fulfilled)和Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。 (2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从Pending变为Resolved和从Pending变为Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。 基本用法 ES6规定,Promise对象是一个构造函数,用来生成Promise实例。 下面代码创造了一个Promise实例。 var promise = new Promise ( function ( resolve , reject ) { // ... some code if ( /* 异步操作成功 */ ){

【javascript 进阶】异步调用

狂风中的少年 提交于 2019-12-16 20:56:20
前言 javascript的中的异步是很重要的概念,特别是ajax的提出,给整个web带来了很大的影响,今天就介绍下javascript的异步编程。 同步与异步 何为同步?何为异步呢? 同步:说白了就是程序一步一步从下向下执行,没有什么别的代码的跳动,就是按序执行,和在景区里女生上厕所是排队是一样的(每次女厕都是有好多人在排队)。可以看成是一个单线程问题。 异步:异步就是程序可以跳着执行,开始执行一段程序之后不用等返回结果就执行其他的代码,等结果返回之后在对结果进行处理,也就是可以在有限的时间内办好几件事情,提高效率,异步一般情况是多个线程问题。举个例子,还是上厕所的例子,A说需要5分钟搞定,B就可以5分钟之后过来,B可以在这5分钟干点别的事情。 所以说异步可以提高程序的执行效率,所以异步编程具有一定的好处,但是编写异步程序却不是那么容易的。 上面是我的理解,下面是摘自别人的文章: "同步模式"就是上一段的模式,后一个任务等待前一个任务结束,然后再执行,程序的执行顺序与任务的排列顺序是一致的、同步的;"异步模式"则完全不同,每一个任务有一个或多个回调函数(callback),前一个任务结束后,不是执行后一个任务,而是执行回调函数,后一个任务则是不等前一个任务结束就执行,所以程序的执行顺序与任务的排列顺序是不一致的、异步的。 浏览器机制 我们都知道了

React之ref详细用法

不羁的心 提交于 2019-12-16 20:47:03
在react典型的数据流中, props 传递是父子组件交互的唯一方式;通过传递一个新的 props 值来使子组件重新 re-render ,从而达到父子组件通信。当然,就像react官网所描述的一样,在react典型的数据量之外,某些情况下(例如和第三方的dom库整合,或者某个dom元素focus等)为了修改子组件我们可能需要另一种方式,这就是 ref 方式。 ref 简介 React提供的这个 ref 属性, 表示为对组件真正实例的引用,其实就是 ReactDOM.render()返回的组件实例 ;需要区分一下, ReactDOM.render() 渲染组件时返回的是组件实例;而渲染dom元素时,返回是具体的dom节点。 例如,下面代码: const domCom = <button type="button">button</button>; const refDom = ReactDOM.render(domCom,container); //ConfirmPass的组件内容省略 const refCom = ReactDOM.render(<ConfirmPass/>,container); console.log(refDom); console.log(refCom); 上述代码返回控制台结果如下图所示:。 ref 可以挂到任何组件上

jquery中的ajax方法(备忘)

余生颓废 提交于 2019-12-16 20:28:28
参考: https://www.cnblogs.com/tylerdonet/p/3520862.html w3school: http://www.w3school.com.cn/jquery/ajax_ajax.asp 1.url : 要求为String类型的参数,(默认为当前页地址)发送请求的地址。 2.type : 要求为String类型的参数,请求方式(post或get)默认为get。注意其他http请求方法,例如put和delete也可以使用,但仅部分浏览器支持。 3.timeout : 要求为Number类型的参数,设置请求超时时间(毫秒)。此设置将覆盖$.ajaxSetup()方法的全局设置。 4.async : 表示请求是否异步处理 要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为false。注意,同步请求将锁住浏览器,用户其他操作必须等待请求完成才可以执行。 5.cache : 表示浏览器是否缓存被请求页面 要求为Boolean类型的参数,默认为true(当dataType为script时,默认为false),设置为false将不会从浏览器缓存中加载请求信息。 6.data : 要求为Object或String类型的参数,发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式

jQuery $.ajax方法

笑着哭i 提交于 2019-12-16 17:54:01
$.ajax() 方法是 jQuery 最底层的 Ajax 实现。 它的结构为:$.ajax(options) 该方法只有1个参数,但在这个对象里包含了 $.ajax() 方法所需要的请求设置以及回调函数等信息,参数以 key / value 的形式存在,所有参数都是可选的,常用参数如下表所示。 参数名称 类型 说明 url String (默认为当前页地址)发送请求的地址 type String 请求方式(POST或GET)默认为GET。注意其他HTTP请求方法,例如PUT 和DELETE也可以使用,但仅部分浏览器支持 timeout Number 设置请求超时时间(毫秒)。此设置将覆盖 $.ajaxSetUp() 方法的全局设置 data Object 或 String 发送到服务器的数据。如果已经不是字符串,将自动转换为字符串格式。 GET 请求中将附加在URL后。防止这种自动转换,可以查看 processData 选项。对 象必须为 key/value 格式,例如{fool :"bar1", foo2 :"bar2"}转换为 &fool=bar1&foo2=bar2。如果是数组,jQuery将自动为不同值对应同一个名称。 例如{foo:["bar1","bar2"]}转换为 &foo=bar1&foo=bar2 dataType String 预期服务器返回的数据类型