Node.js(七)——HTTP作用域、上下文
http源码解读
什么是作用域?
作用域和调用函数访问变量的能力有关
作用域分局部作用域和全局作用域,同时作用域往往和变量有关系,
处在局部作用域里面可以访问到全局作用域的变量,反之则访问不到
实例如下:
varglobalVariable='Thisisglobalvariable'functionglobalFunction(){varlocalVariable='Thisislocalvariable'console.log('Visitglobal/localvariable')console.log(globalVariable)console.log(localVariable)globalVariable='Thisischangedvariable'console.log(globalVariable)functionlocalFunction(){varinnerLocalVariable='Thisisinnerlocalvariable'console.log('Visitglobal/local/innervariable')console.log(globalVariable)console.log(localVariable)console.log(innerLocalVariable)}localFunction()}globalFunction()
执行结果如下:
什么是上下文?
this关键字有关,是调用当前可执行代码的引用
常常代表this变量的值以及它的指向,它决定一个函数怎么被调用,当这个函数作为一个对象的方法被调用时this总是指向调用这个方法的对象
代码如下:
第一种
varpet={words:'...',speak:function(){console.log(this.words)console.log(this===pet)}}pet.speak()
执行结果如下:
第二种:
functionpet(words){this.words=wordsconsole.log(this.words)//这个this指向顶层的global对象console.log(this===global)}pet('...')
执行结果如下:
第三种:
functionPet(words){this.words=wordsthis.speak=function(){console.log(this.words)//此时的this指向的谁?cat对象console.log(this)}}varcat=newPet('Miao')cat.speak()
执行结果如下:
提出上下文是为了引出函数所拥有的两个方法:call和apply,可以改变上下文执行对象,可以在自定义上下文中执行函数,作用是一样的
只是用法有区别
call函数需要一个参数列表,apply允许你传递一个参数作为数组,具体的是作用呢是调用一个对象的方法以另一个对象替换当前对象,其实就是更改当前对象的this指向的内容,标准一点就是:以某个方法当做指定某个对象的方法被执行
示例如下:
varpet={words:'...',speak:function(say){console.log(say+''+this.words)}}//pet.speak('Speak')vardog={words:'Wang'}//让dog也能有speak方法pet.speak.call(dog,'Speak')
运行结果如下:
利用call和apply可以方便的实现继承
functionPet(words){this.words=wordsthis.speak=function(){console.log(this.words)}}functionDog(words){Pet.call(this,words)//Pet.apply(this,arguments)}//通过new生成实例对象vardog=newDog('Wang')dog.speak()
运行结果如下:
这就是call和apply的用法
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。