/**
* 因为JS没有块级作用域,if里面的foo又是以var形式声明的,所以会被提升上去,
* 被赋值为undefined,之后undefined代表false,所以会进入if语句块,
* foo被赋值为10,所以下面会打印输出10
*/
var foo =1;

function bar(){
console.log(foo); // undefined
if(!foo){
var foo =10;
}
console.log(foo); //
}
bar();
/**
* 调用b函数的时候,由于b函数里面的a函数存在函数提升,
* 会提升到最上面,所以第一次打印是function a() 接下来a被赋值为10,
* 但是这个a只是一个函数上下文里面的局部变量,用完之后就会被销毁掉,
* 所以当外部打印a的时候,仍然打印出1
*/
var a =1;
function b(){
console.log(a); // function a
a =10;
return;
function a(){}
}
b();
console.log(a); //
// 执行fn函数以后,在全局上下文里面会生成一个c,局部环境下面会生成一个b,
// 在fn函数调用完毕之后,b就会被销毁,由于f为true,所以会进入if生成a变量
var f =true;
if(f===true){
var a =10;
}
function fn(){
var b =20;
c=30; }
fn();
console.log(a); //
console.log(c); //
console.log(b); // 报错
/**
* 全局里面首先会存在a和b,值都为3,之后进入IIFE后,首先是执行的b = 5,
* 这个时候就会找到全局的b,将其修改为5,之后是var a = b,
* 这个a就是局部的a,所以全局的a不会受影响。
*/
 var a =b=3;
(function(){
var a =b=5; // b=5; var a =b; })()
console.log(a); //
console.log(b); //
/**
* 在下面的foo函数会被提升,接下来第一条代码打印出来就是function foo 接下来foo被赋值为A,
* 所以打印输出为A,之后foo又被赋值为一个函数,所以打印输出为function foo,调用foo,输出B,后面是一样的
*/
console.log(foo);   //   function foo
var foo ='A';
console.log(foo);// A
var foo =function(){
console.log('B');
}
console.log(foo); // function foo
foo();
function foo(){
console.log('C');
}
console.log(foo);
foo();//B
/**
* 主要就是要注意b函数里面的var a = 3存在变量提升,所以b函数里面第一个是undefined,
* 接下来依次赋值打印输出,但是由于是局部变量,所以对全局的a不影响
*/
 var a =1;
function b(){
console.log(a); // undefined
a =2;
console.log(a);//
var a=3;
console.log(a);//
}
console.log(a);//
b();
console.log(a);//

JS-上下文练习的更多相关文章

  1. JavaScript , js 上下文(this 的指代)

    上下文 代表 this 变量的值, 以及 它的 指代; 它决定一个函数怎么被调用; 当一个函数作为一个对象的方法被调用的时候, this总是指向 调用这个方法的对象. ----- 1 ,情况一: 字面 ...

  2. JS 上下文模式

    function test(){ console.log(a);//undefined; var a = 1; } test(); 也许你会遇到过上面这样的面试题,你只知道它考的是变量提升,但是具体的 ...

  3. CEF3开发者系列之JS与C++交互之二

    本文翻译自JavaScriptIntegration (https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration).本 ...

  4. 运用js解决java selenium元素定位问题

    一.解决定位并操作uneditable元素 尝试了通过id,xpath等等定位元素后点击都提示Element is not clickable at point 再看了下可以click的元素发现上面有 ...

  5. 突破XSS字符数量限制执行任意JS代码

    一.综述 有些XSS漏洞由于字符数量有限制而没法有效的利用,只能弹出一个对话框来YY,本文主要讨论如何突破字符数量的限制进行有效的利用,这里对有效利用的定义是可以不受限制执行任意JS.对于跨站师们来说 ...

  6. 异步JS:$.Deferred的使用

    异步JS:$.Deferred的使用 原文链接:http://www.html5rocks.com/en/tutorials/async/deferred/ 当我们构建一个平稳的,响应式的HTML5应 ...

  7. 突破XSS字符限制执行任意JS代码

    突破XSS字符限制执行任意JS代码 一.综述 有些XSS漏洞由于字符数量有限制而没法有效的利用,只能弹出一个对话框来YY,本文主要讨论如何突破字符数量的限制进行有效的利用,这里对有效利用的定义是可以不 ...

  8. node js 调试方法

    1. node-debug tutorial 大家对nodejs调试应该都比较头疼,至少我这个不用IDE写js的人很头疼这个,其实node的生态圈非常好 有非常好的工具和非常潮的开发方式 这里总结了3 ...

  9. js基础知识点收集

    js基础知识点收集 js常用基本类型 function show(x) { console.log(typeof(x)); // undefined console.log(typeof(10)); ...

  10. iOS JS 和 OC交互 / JS 和 native 相互调用

    现在app 上越来越多需求是通过UIWebView 来展示html 或者 html5的内容, js 和 native OC代码交互 就非常常见了. js 调用 native  OC代码 第一种机制 ( ...

随机推荐

  1. C之指针

    什么是指针 * 指针变量:用来存储某种数据在内存中的地址.* 世面上书籍一般把指针和指针变量的概念混在一起了.市面上的书籍说的指针指的就是指针变量 Ø *号的三种含义1. 两个数相乘int i =5; ...

  2. eclipse 创建web项目,新建servelet实例

    参考: http://www.phperz.com/article/14/1127/38108.html http://jingyan.baidu.com/article/c843ea0b9aa914 ...

  3. Linux系统管理----LVM逻辑卷和磁盘配额作业习题

    1.为主机增加80G SCSI 接口硬盘 2.划分三个各20G的主分区 [root@localhost chen]# fdisk /dev/sdb 命令(输入 m 获取帮助):n Partition ...

  4. Java High Level REST Client 之 创建索引

    1. 创建索引请求 CreateIndexRequest request = new CreateIndexRequest("twitter"); 2.设置 2.1 分别设置 2. ...

  5. 最新 华云数据java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.华云数据等10家互联网公司的校招Offer,因为某些自身原因最终选择了华云数据.6.7月主要是做系统复习.项目复盘.Leet ...

  6. Python报错:TypeError: data type not understood

    K-Means聚类算法 def randCent(dataSet, k): m, n = dataSet.shape # numpy中的shape函数的返回一个矩阵的规模,即是几行几列 centrod ...

  7. [CF707D]Persistent Bookcase_主席树_bitset

    Persistent Bookcase 题目链接:http://codeforces.com/contest/707/problem/D 注释:略. 题解: 发现虽然$q\le 10^5$但是网格是$ ...

  8. 【Jmeter源码解读】002——程序入口类NewDriver.java

    1.运行环境的检查 2.刚才初始化的 classloader 加载类 org.apache.jmeter.JMeter 然后通过 java 反射的方式来调用 org.apache.jmeter.JMe ...

  9. lab3:系统调用

    jos系统调用函数链 记录自己对jos系统调用实现的理解. 用户程序访问系统服务的方法 用户使用系统服务的方式大概分为如下几种: (1)用户程序---->库函数----->系统调用---- ...

  10. (十四)springMvc 对 restful 的支持

    文章目录 restful 的概念 配置支持 restful 的前端控制器 配置不拦截静态资源 restful 的概念 restful 是一种开发理念: 对 url 进行规范 每个 url 代表一个资源 ...