设为首页 收藏本站
云服务器等爆品抢先购,低至4.2元/月
查看: 912|回复: 0

[经验分享] Nodejs之http对象

[复制链接]

尚未签到

发表于 2017-2-21 11:24:50 | 显示全部楼层 |阅读模式
  前言:
  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进行解析,可以分别知道里面的主机名、请求的路径。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345208-1-1.html 上篇帖子: nproxy 基于Nodejs的Proxy 下篇帖子: nodejs程序后台一直运行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表