/**
* 因为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. Android:高通平台性能调试

    1.GPU / CPU 信息打印脚本 gpu_cpu_info.bat @echo off echo "==================GPU====================== ...

  2. prometheus监控插件mysqld_exporter

    1,首先需要增加授权 mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDEN ...

  3. 【leetcode】506. Relative Ranks

    problem 506. Relative Ranks solution1:使用优先队列: 掌握priority_queue 和 pair的使用: class Solution { public: v ...

  4. 一个小故事,玩转Python-while循环

    无论是传统编程场景还是当下火爆的人工智能应用场景,循环的应用都是必不可少的,上一篇文章中阐述了如何使用for循环来进行编程,这篇文章将会由一个小朋友经常听的故事来讲Python编程中的while循环. ...

  5. ps命令入门使用指南

    声明:本文算不上原创,主要是参考和整理了该博客ps命令详解 Shell 命令: ps [options] [--help] ps 常用参数: l 长格式输出: u 按用户名和启动时间的顺序来显示进程: ...

  6. 合并多个tensorflow模型的办法

    直接上代码: import tensorflow as tf from tensorflow.python.tools import freeze_graph from tensorflow.pyth ...

  7. Unit Testing, Integration Testing and Functional Testing

    转载自:https://codeutopia.net/blog/2015/04/11/what-are-unit-testing-integration-testing-and-functional- ...

  8. PHP根据IP判断地区名信息的示例代码

    <?php header("Content-type: text/html; charset=utf-8"); function getIP(){ if (isset($_S ...

  9. qt坐标系统见解

    窗口坐标为逻辑坐标,是基于视口坐标系的. 视口坐标为物理坐标,是基于绘图设备坐标系的 窗口坐标始终以视口坐标为最终目标进行映射: QPainter::setWindow 修改了窗口位置和大小(左上角重 ...

  10. mac必装软件

    1.IINA: https://iina.io/ 2.keka: https://www.keka.io/zh-cn/ 3.欧陆词典: https://www.eudic.net/v4/en/app/ ...