Node.js(三)【HTTP、作用域、上下文对象】

querystring参数小利器
querystring.stringify({name:‘lqc‘,course:[‘jade‘,‘node‘],from:‘‘})
//输出‘name=lqc&course=jade&course=node&from=‘

querystring.stringify({name:‘lqc‘,course:[‘jade‘,‘node‘],from:‘‘},‘,‘)
//输出‘name=lqc,course=jade,course=node,from=‘

querystring.stringify({name:‘lqc‘,course:[‘jade‘,‘node‘],from:‘‘},‘,‘,‘:‘)
//输出‘name:lqc,course:jade,course:node,from:‘

//反序列化,解析url的querystring字符串
querystring.parse(‘name=lqc&course=jade&course=node&from=‘)
//输出{ name: ‘lqc‘, course: [ ‘jade‘, ‘node‘ ], from: ‘‘ }

//转义:
querystring.escape(‘哈哈‘)
//输出‘%E5%93%88%E5%93%88‘

//反转义:
querystring.unescape(‘%E5%93%88%E5%93%88‘)
//输出‘哈哈‘

查看chrome浏览器的缓存
输入网址:chrome://net-internals/#dns

HTTP知识填坑:
状态码:status code

200
400
401
403
404
500
503

HTTP模块
HTTP事件回调
1.回调(把函数作为参数传递进去function add(callback) {console.log(callback)}function callback() {return

‘I am callback‘;}add(callback());)

function add(callback) {var value = callback(); console.log(‘Excuse me, ‘ + value)}
function callback() {return‘I am callback‘;}
add(callback);

callback.js文件:

 1 /**
 2  * 回调
 3  * */
 4 function learn(something){
 5     console.log(something);
 6 }
 7
 8 function we(callback, something) {
 9     something += ‘ is cool‘;
10     callback(something);
11 }
12
13 we(learn, ‘Nodejs‘);

//命令行执行此文件
node callback

1 //传递一个匿名函数
2 we(function (something) {
3     console.log(something);
4 }, ‘JavaScript‘);

2.同步/异步

 1 var c = 0;
 2
 3 function printIt() {
 4     console.log(c);
 5 }
 6
 7 function plus() {
 8     //延迟1s
 9     setTimeout(function () {
10         c += 1;
11     }, 1000);
12 }
13
14 plus();
15 printIt();//结果为0

/*************************************************************/
//异步执行

 1 var c = 0;
 2
 3 function printIt() {
 4     console.log(c);
 5 }
 6
 7 function plus(callback) {
 8     //延迟1s
 9     setTimeout(function () {
10         c += 1;
11         callback();
12     }, 1000);
13 }
14
15 plus(printIt);

3.I/O
4.单线程/多线程
5.阻塞/非阻塞
6.事件
7.事件驱动
8.基于事件驱动的回调
9.事件循环

HTTP源码解读
作用域

 1 ar globalVariable = ‘This is global variable‘;
 2
 3 function globalFunction () {
 4     //局部变量
 5     var localVariable = ‘This is local variable‘;
 6     console.log(‘Visit global/local variable‘);
 7     console.log(globalVariable);
 8     console.log(localVariable);
 9
10     globalVariable = ‘This is changed variable‘;
11     console.log(globalVariable);
12
13     function localFunction () {
14         var innerLocalVariable = ‘This is inner local variable‘;
15         console.log(‘Visit local function‘);
16     }
17
18     localFunction();
19 }
20
21 globalFunction();

上下文

 1 //声明一个对象变量
 2 var pets = {
 3     words: ‘...‘,
 4     name: ‘ErBao‘,
 5     kind: ‘rabbit‘,
 6     speak: function () {
 7         console.log(this.words); // ...
 8         console.log(this === pets); // true
 9     }
10 };
11
12 pets.speak();

/*************************************/

1 function pets(words) {
2     this.words = words;
3
4     console.log(this.words);
5     console.log(this); //这里的this并不是pets,而是顶层的global对象
6     console.log(this === global); // true
7 }
8
9 pets(‘...‘);

this上下文对象是谁取决于函数的调用方式:1.直接调用(this表示全局对象) 2.实例化对象调用(this表示实例化的那个对象)

/*********************************/

 1 function Pets(words) {
 2     this.words = words;
 3     this.speak = function () {
 4         console.log(this.words);
 5         console.log(this);
 6     };
 7     console.log(this);
 8
 9     /**
10      Pets { words: ‘ErBao‘, speak: [Function] }
11      ErBao
12      Pets { words: ‘ErBao‘, speak: [Function] }*/
13 }
14
15 //定义一个实例对象
16 var rabbit = new Pets(‘ErBao‘);
17 rabbit.speak();

/***********************************************/

call(),apply()

 1 var pets = {
 2     words: ‘...‘,
 3     speak: function (say) {
 4         console.log(say + this.words);
 5     }
 6 };
 7
 8 //pets.speak(‘Speak ‘);
 9
10 var dog = {
11     words: ‘wang‘
12 };
13
14 //call()方法实现JavaScript继承,改变执行上下文
15 //父对象.父对象的方法.call(子对象, 父对象方法的参数值),父对象的方法继承给子对象
16 //pets对象转换为dog对象,同时调用pets对象的方法
17 pets.speak.call(dog, ‘Speak ‘); // Speak wang

/***********************************************/

call、apply实现继承
//定义一个构造函数

 1 //定义一个构造函数
 2 function Pets(words) {
 3     this.words = words;
 4
 5     this.speak = function () {
 6         console.log(this.words);
 7     };
 8 }
 9
10 function Dog(words) {
11     Pets.call(this, words);
12     //Pets.apply(this, []);
13 }
14
15 var dog = new Dog(‘HuaHua‘);
16 dog.speak(); //HuaHua
时间: 2024-08-05 05:13:57

Node.js(三)【HTTP、作用域、上下文对象】的相关文章

[读书笔记]了不起的node.js(三)

这周的nodejs学习内容为几个依赖包的使用,把书上的例子都敲了一遍.这篇就以例程为线索,复习一下一周的工作. 1.connect 这个例程主要是使用connect依赖包,connect提供一个中间件(由函数组成,与请求.响应对象交互)的功能.书中也介绍了connect内置其他的中间件,这些中间件起到组织代码完成web功能的作用. 2.session 使用connect进行用户会话,进行基本的登录系统.通过中间件实现了检查登录.展示表单.用户匹配.处理登出的功能.展示了中间件的强大和组织方式.

#9.6课堂JS总结#变量作用域 date()对象 math()对象

一.变量的作用域 1.JavaScript的作用域链 首先看下下面这段代码: <script type="text/javascript"> var rain = 1; function rainman(){ var man = 2; function inner(){ var innerVar = 4; alert(rain); } inner(); //调用inner函数 } rainman(); //调用rainman函数 </script> 观察aler

Node.js继承中的静态类对象(《node.js开发实战详解》书中一些错误的改正)

今天气真好,最近挂掉一些面试之后心情略失落. 神马都是浮云,要永远做好世界第二. 不多提了,你问我心态为啥变好了.-------都是情怀,,. 嗯啊,最近在研究node. 别人问?你这水平还node... 哈哈哈,好伤心.... 不多提了,言归正传. 神马模块化神马的先就不多讲了,就一个module.export和export区别,后者对象的属性属于前者,逆命题不成立. 还有util.inherits(A,B)这个API注意一下A只会继承B的原型方法,原型以外的不会继承.不是说原型中数据是共享的

Node.js(七)——HTTP作用域、上下文

http源码解读 什么是作用域? 作用域和调用函数访问变量的能力有关 作用域分局部作用域和全局作用域,同时作用域往往和变量有关系, 处在局部作用域里面可以访问到全局作用域的变量,反之则访问不到 实例如下: var globalVariable = 'This is global variable' function globalFunction(){ var localVariable ='This is local variable' console.log('Visit global/loc

Node.js(三)——URL模块

URL模块: URL:统一资源定位符,偏重定位 URI:统一资源标识符,偏重标识 网站就是URL,是一个具体的符号说明了要通过哪一种协议来访问一个资源 URI更抽象,是一个字符串格式规范 是一种概念上的定义 事实上,URL是URI的子集 在该模块中有三个方法 url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) 解析地址,解析成一个对象 url.format(urlObj) 将一个url对象格式化成url字符串 url.resolv

node.js中的字符串、对象和json处理函数

querystring.parse() 将字符串转成对象,就是把url上带的参数串转成数组对象. querystring.parse(str, [sep], [eq], [options]) 接收参数: str 欲转换的字符串 sep 设置分隔符,默认为 ‘&' eq 设置赋值符,默认为 ‘=' [options] maxKeys 可接受字符串的最大长度,默认为1000 querystring.parse('foo=bar&baz=qux&baz=quux&corge')

javascript 作用域 闭包 对象 原理和示例分析(上)

                                                                                             阅读.理解.思考.实践,再实践.再思考....  深圳小地瓜献上 javascript高级特性包含:作用域.闭包.对象 -----------------------------------------------作用域-----------------------------------------------

Node.js之模块机制

文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 其实在JavaScript的发展中,它主要是在浏览器前端中被应用广泛.因为在实际应用中, JavaScript的表现能力主要取决于宿主环境的API支持程度, 在最早期,只有对BOM, DOM的支持,随着HTML5的出现,在浏览器中出现了更多,更强大的API供JavaScript调用,但是这些都是发生在前端,后端JavaScript的规范却远远落后.Java有class文件,Phthon有import机制,P

执行上下文对象的原理及使用

执行上下文对象: 在浏览器执行javascript代码之前,浏览器会做一些准备工作(从准备工作这一操作开始,直到对应的这一作用域的所有代码被执行完,这样的一个过程就叫做执行上下文;执行上下文可以被看成一个对象,这个对象 就是用来管理其对应作用域中的各个数据,这些数据就是对象中的属性). 一. 全局作用域中的一些准备工作     1. 找到标记的全局变量,并为其赋值为undefined;     2. 给this赋值为window对象     3. 函数声明,并给函数赋值为整个函数块 二. 函数作

node.js中的交互式运行环境-REPL

<Node.js权威指南>第2章Node.js中的交互式运行环境--REPL 开发者可以在该环境中很方便地输入各种JavaScript表达式并观察表达式的运行结果. 在学习Node.js框架的过程中,通过该运行环境的使用,我们可以很方便地了解Node.js中定义的各种对象所拥有的各种属性及方法.本节为大家介绍在REPL运行环境中操作变量 2.2 在REPL运行环境中操作变量 在REPL运行环境中,可以使用var关键字来定义一个变量并为其赋值,但是在输入了对其赋值进行的表达式后,该表达式的执行结