您的位置:首页 > 理论基础 > 计算机网络

Nodejs之http对象

2014-04-26 16:04 134 查看

前言:

 

Mode1:JavaScript作用域、闭包

 

执行环境

在编写JavaScript代码,执行环境对我们来说是不可见的,对于JavaScript解析器是非常重要的。因为它依赖这个环境,每一个执行环境定义了一些变量和函数。有权访问的其他数据决定了变量和函数各自的行为。每一个执行环境有一个与执行环境相关联的变量对象。在执行环境当中定义的所有变量和函数都会保存到变量对象当中。这个对象我们在编写JavaScript代码的时候,我们也是看不见的。JavaScript解析器非常依赖这个对象。每一个全局执行环境,全局执行环境:最外围的执行环境,根据ECMAscript里面实现的不同,他就会有不同的执行环境对象,像在Web浏览器里面的Windows对象,在nodejs中就是global对象,当某一个执行环境里面的代码执行完毕后,这个环境就会被销毁,保存在环境里面的变量对象上面的一些变量和一些函数的定义也会被销毁。全局执行环境就比较特殊,除非应用程序退出,在nodejs中,我们调用主进程.exit,我们退出这个进程的时候,进程关闭,执行环境被销毁。在网页中,只有关闭网页浏览器,执行环境会被销毁。

 

作用域

(片段1)
var tmp = "tmpData";
if(tmp == "tmpData"){
var msg = "输出信息";
}
var tt = msg
(片段2)
function sayHi(name){
var msg = "欢迎";
alert(msg);
}
sayHi(tmp);
(3)
function sayHi(name){
var msg ="欢迎";
dosomething = function(){
var msg = "里面的msg";//如果去掉,则访问sayHi的msg
alert(msg);
}
}
sayHi(tmp);

       在JavaScript中没有块级作用域(片段1)。如果用Java、C#或者PHP编译不会通过,就是因为有块级作用域这个概念,在if、while快中的定义的变量,外部无法使用。而在JavaScript中没有块级作用域。在JavaScript唯一能够常见作用域是通过function中定义的变量,外部无法使用(片段2)。在function大括号里面声明的变量是依赖于function的作用域的。所以每个函数都有自己的执行环境。当执行流执行到这个函数的时候,整个函数的执行环境就会被压入到一个环境栈中,栈是先进后出的,栈会在函数执行之后,函数的环境将会被栈弹出来,把控制权返回给之前的执行环境。

      简化:这个程序在开始执行的时候,会有一个全局的执行环境,而且还有一个变量对象,变量对象存着环境里面定义的所有变量和函数,并且这个执行环境解析器会把它压入到全局的栈中,当JavaScript遇到一个function的时候,function就会有一个执行环境,这个执行环境同样的会有一个变量对象,并且这个执行环境也会被压入到全局的栈中,当函数执行完毕后,栈才会把执行环境弹出来,并且把控制权返回给之前的执行环境,也就是说,当我们调用sayHi的时候,它会有一个执行环境,并且这个执行环境会压入到环境栈中,环境栈中现在就有全局的执行环境在里面,[’say执行环境‘,'全局执行环境'],当sayHi执行结束后,sayHi的执行环境将被弹出来,控制权就会返回给上一个全局执行环境,全局执行环境是除非应用程序退出,否则一直存在,所以就保证了函数执行结束后,交回给上一个。如果有函数嵌套,则叫给父函数,最终会把控制权交给全局执行环境,

 

闭包

如果在function中又有一个函数(3),就是闭包,环境栈就会改变,[’dosomething执行环境‘,’say执行环境‘,'全局执行环境'],每个执行环境都有变量对象,变量对象存储着定义变量和函数,如果在dosomething中访问sayHi中的msg变量是可以访问到的。因为当我们调用msg变量的时候,它会先到dosomething执行环境中变量对象去查找,如果有则用。没有则去遍历环境栈,

Mode2:NodeJS http工具库

 

http Server(服务器)

http ServerRequest(服务器请求)

只是指服务器接受到一个请求,会解析成http ServerRequest对象。方便我们获取里面的信息。

http ServerResponse(服务器响应)

当我们解析的请求需要返回信息到客户端的时候,使用Response对象

 

http Client(客户端)

http ClientRequest()

代表客户端向服务器端发送请求的信息,都会封装在这个对象中

http ClientResponse

用来封装服务器响应的,当一个请求发送到服务器端,服务器端接收解析并返回输出内容的时候,那我们就会得到一个http ClientResponse对象,通过调用里面的一些函数,或者监听里面的一些事件,我们可以对服务器输出的内容做处理。

url模块

用来解析客户端请求,我们可以拿这个url模块对url进行解析,可以分别知道里面的主机名、请求的路径。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: