作用域

function(){}大括号中的内容是一个作用域;

function 和 var 的声明会被提到作用域的最上面

function f(){

    a = 2;
var b = g();  //此处可以访问到g()函数
a=3;
return b; function g(){  //函数的声明会被提前到作用域顶部
return a;
}
a=1;
} var result = f();
console.log(f());  //
console.log(a)    //3 a未被声明,那么就会在全局作用域被声明;
            // 如果a被在f()中声明,那么全局作用域则访问不到
            // 如果a在全局和局部作用域都被声明:那么两个a互相不干扰

调用函数访问变量的能力

//全局变量
var globalVariable = 'This is global variable'
//全局函数
function globalFunction(){
//局部变量
var localVariable = 'This is local variable'
console.log('visit gloabl/local variable')
console.log(globalVariable)
console.log(localVariable) globalVariable = 'this is change variable' console.log(globalVariable)
//局部函数
function loaclFunction(){
//局部变量
var innerLocalVariable = 'this is inner local variable'
console.log('visit gloabl/local/innerLocal variable')
console.log(globalVariable)
console.log(localVariable)
console.log(innerLocalVariable)
}
//作用域内可访问局部函数
loaclFunction() }
//在全局不能访问局部变量和函数
globalFunction()

上下文

和this关键字有关,是调用当前可执行代码的对象的引用

this指向函数拥有者,只能在函数中使用

this指向构造函数
var pet = {
words:'..',
speak:function(){
console.log(this.words)
console.log(this==pet)
}
} pet.speak()

this指向全局对象
function pet(words){
this.words = words
console.log(this.words)
console.log(this==global)
}
//this指向了全局global对象
pet('..')

this指向实例对象
function Pet(words){
this.words = words
this.speak = function(){
console.log(this.words)
console.log(this)
}
} var cat = new Pet('Miao')
cat.speak();

使用call和apply改变上下文引用对象

this指向引用方法的对象
var pet = {
words:'..',
speak:function(say){
console.log(say + ' ' + this.words)
}
} pet.speak('haha')

使用call-apply
var pet = {
words:'..',
speak:function(say,free){
console.log(say + ' ' + free+ ' '+ this.words)
}
} var dog={
words:'wawa'
} pet.speak.call(dog,'haha','lala')
pet.speak.apply(dog,['haha','lala'])

使用call和apply方便实现继承
function Pet(words){
this.words = words this.speak = function(){
console.log(this.words)
}
}
//Dog继承Pet,拥有了Pet的speak方法
function Dog(words){
Pet.call(this,words)
} var dog = new Dog('wawa') dog.speak()

06慕课网《进击Node.js基础(一)》作用域和上下文的更多相关文章

  1. 03慕课网《进击Node.js基础(一)》API-URL网址解析

    url url.parse(url,query,host);解析域名 url必须,地址字符串 query可选 host 可选:在不清楚协议时正确解析 querystring 字符串和对象之间互相解析 ...

  2. 01慕课网《进击Node.js基础(一)》Node.js安装,创建例子

    版本:偶数位为稳定版本,基数为非稳定版本 - 0.6.x - 0.7.x    - 0.8.x -0.9.x    -0.10.x  -0.11.x 概念:Node.js采用谷歌浏览器的V8引擎,用C ...

  3. 10慕课网《进击Node.js基础(一)》初识promise

    首先用最简单的方式实现一个动画效果 <!doctype> <html> <head> <title>Promise animation</titl ...

  4. 07慕课网《进击Node.js基础(一)》HTTP小爬虫

    获取HTML页面 var http = require('http') var url='http://www.imooc.com/learn/348' http.get(url,function(r ...

  5. 进击Node.js基础(二)

    一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...

  6. 02慕课网《进击Node.js基础(一)》——CommonJs标准

    是一套规范管理模块 每个js 为一个模块,多个模块作为一个包 node.js和Couchdb是对其的实现: 不同于jQuery 模块:定义.标识.引用(地址/模块名称) 模块类型: 核心模块http ...

  7. 进击Node.js基础(一)

    一.前言 1:Node.js本质上是用chrome浏览器 v8引擎 使用c++编写的JS运行环境 2:相比于JS没有浏览器安全级的限制,额外提供了一些系统级的API:文件读写,进程管理,网络通信等. ...

  8. 04慕课网《进击Node.js基础(一)》HTTP讲解

    HTTP:通信协议 流程概述: http客户端发起请求,创建端口默认8080 http服务器在端口监听客户端请求 http服务器向客户端返回状态和内容 稍微详细解析: 1.域名解析:浏览器搜素自身的D ...

  9. 11慕课网《进击Node.js基础(一)》Buffer和Stream

    Buffer 用来保存原始数据 (logo.png) 以下代码读取logo.png为buffer类型 然后将buffer转化为string,新建png 可以将字符串配置: data:image/png ...

随机推荐

  1. <摘录>字节对齐与结构体大小

    说明: 结 构体的sizeof值,并不是简单的将其中各元素所占字节相加,而是要考虑到存储空间的字节对齐问题.这些问题在平时编程的时候也确实不怎么用到,但在一 些笔试面试题目中出是常常出现,对sizeo ...

  2. MapReduce -- 好友推荐

    MapReduce实现好友推荐: 张三的好友有王五.小红.赵六; 同样王五.小红.赵六的共同好友是张三; 在王五和小红不认识的前提下,可以通过张三互相认识,给王五推荐的好友为小红, 给小红推荐的好友是 ...

  3. cgroup测试存储设备IOPS分配

    1 使用:创建树并且attach子系统 首先要创建文件系统的挂载点作为树的根 mkdir /cgroup/name mkdir /cgroup/cpu_and_mem Mount这个挂载点到一个或者多 ...

  4. IOPS、带宽(band width)、吞吐量 (throughput)

    SAN和NAS存储一般都具备2个评价指标:IOPS和带宽(throughput),两个指标互相独立又相互关联.体现存储系统性能的最主要指标是IOPS.   IOPS (Input/Output Per ...

  5. 前端实现文件在线预览txt,pdf,doc,xls,ppt几种格式

    做法就是使用iframe标签 1.text,pdf的文件预览 <iframe class="filename" :src="文件的地址" width='1 ...

  6. Mysql数据库 day1

    Mysql数据库属于关系型数据库(mysql.oracle.sql server),非关系型数据库有DB2.Redis MySQL执行原理,逻辑分层.更改数据库处理引擎 作者:Stanley 罗昊 [ ...

  7. 通过脚手架创建Vue项目

    第一步 准备工作 1.下载安装Node.js 验证是否安装的方法,在命令行输入node -v 2.安装Vue 在命令行输入npm install -g @vue/cli 查看Vue版本号 npm vu ...

  8. MongoDB的聚合操作以及与Python的交互

    上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...

  9. SuperObject Delphi 的 JSON 属性乱序 - 操作类改造 - 关于属性顺序的问题

    Delphi 的 ISuperObject 属性顺序为随机.但是很多时候,是需要按加入顺序进行读取.我也看了网上很多人有类似需求.也有人问过原作者,作者答复为:JSON协议规定为无序.看了我真是无语. ...

  10. Go指南 - 笔记

    Go指南 - 笔记 标签(空格分隔): Go Go指南 一.基础 1.包 每个Go程序都是由包构成的. 程序从main包开始运行. 包名与导入路径的最后一个元素一致 2.导入 分组导入:使用圆括号组合 ...