/**
* 因为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. Androidstudio 编译慢 这样的体验肯定很多人都有!!!

    本人也是经历过的   在老板站在你身后  说看下你做的东西怎么样啦   然后你开始编译你刚写代码     然后过了老长一段时间    你默默的拿起水来喝   缓解尴尬   boss一直站在后面   忍 ...

  2. Kotlin入门-Android的基础布局

    线性布局线性布局LinearLayout是最常用的布局,顾名思义,它下面的子视图像是用一根线串了起来,所以其内部视图的排列是有顺序的,要么从上到下垂直排列,要么从左到右水平排列.排列顺序只能指定一维方 ...

  3. Kotlin中反射

    枚举类成员 import kotlin.reflect.full.memberFunctions import kotlin.reflect.full.memberProperties fun mai ...

  4. 文件上传使用FileUpload组件进行代码实现

    使用FileUpload组件进行代码实现 实现步骤 1. 获取解析器工厂: DiskFileItemFactory 2. 获取解析器对象: ServletFileUpload 3. 解析request ...

  5. 从零搭建配置Cuckoo Sandbox

    1.安装依赖 $ sudo apt-get install git mongodb libffi-dev build-essential python-django python python-dev ...

  6. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_13-删除页面-前端-Api调用

    增加删除链接 <el-button size="small" type="text" @click="del(page.row.pageId)& ...

  7. Qt编写数据可视化大屏界面电子看板12-数据库采集

    一.前言 数据采集是整个数据可视化大屏界面电子看板系统核心功能,没有数据源,这仅仅是个玩具UI,没啥用,当然默认做了定时器模拟数据,产生随机数据,这个可以直接配置文件修改来选择采用何种数据采集方法,总 ...

  8. 关于Jmeter测试移动端应用时提示非法登录,不是合法的登录设备时的解决办法

    当Jmeter测试移动端应用时提示非法登录,不是合法的登录设备时的解决办法:只需要在jmeter的http信息头管理器中配置相应的设备信息,可通过抓包工具得到:即头信息Header中的Miscella ...

  9. Python中elasticsearch插入和更新数据的实现方法

    Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...

  10. 容器版Jenkins连接Kubernetes---------非容器版jenkins是无法安装kubenetes插件的,所以无法连接k8s

    容器版Jenkins连接Kubernetes 特别注意:必须用谷歌浏览器,而且非容器版jenkins是无法安装kubernetes插件的,所以无法连接k8s 一.环境说明 OS系统版本:Ubuntu ...