console.log(a); // undefined
var a = 12; //
function fn() {
  console.log(a); // undefined
  var a = 13; //
}
fn();
console.log(a); //
  1. 创建全局作用域;
  2. 变量提升,声明一个 a 变量、定义一个函数 fn;
  3. 执行代码;( 变量 a 已提升但未赋值,所以 a = undefined,输出 a 值为 undefined,设置 全局变量 a = 12 )
  4. 执行 fn,形成一个私有作用域 fn ;
  5. 私有作用域中的执行过程为:
    1)形式参数赋值。没有形式参数;
    2)变量提升。提升变量 a ;(私有作用域中,如果定义了变量,那么所有的相同变量名都是同一个)
    3)执行代码。局部变量 a已提升还未赋值,所以是 undefined,输出 a 值为 undefined,设置局部变量 a = 13 ;
  6. 输出全局变量 a 值 为 12;

 console.log(a); // undefined
var a = 12; //
function fn() {
  console.log(a); //
  a=13; //
}
fn();
console.log(a); // 13
9 // 结果为 undefined 、12 、13
 console.log(a); // a is not defined

 a=12;
function fn() {
  console.log(a);
  a = 13;
}
fn();
console.log(a);
// a is not defined

 var foo = 1;
function bar () {
/**
* 形参赋值:无
* 变量提升
* var foo
*/
if (!foo) { // ==> !undefined ==> true
var foo = 10;
}
console.log(foo);// foo => foo
}
 var n = 0;
function a() {
var n = 10;
function b() {
n++;
console.log(n);
console.log(this);
}
b();
return b;
}
var c = a();
c();
console.log(n); // ---------------------------------
// 创建全局作用域 n、 c、a(a =>> 指向函数堆栈的地址 )
// 开始执行 n = 0; c = a() 此过程会把 a 执行结果赋值给 c 变量);
// 执行 a() 时候,创建私有 window.a 作用域,有变量 n、 b (b =>> 指向函数堆栈的地址 000111)
// 开始执行 n = 10; b();
// 执行 b() 时候,创建 window.a.b 作用域,变量为 n 取自上级作用域 a.n;
// 执行 n++; console.log(n);( n => 10 + 1; console.log(11);)
// 之后 a.b 作用域会销毁,因为此作用域在其他处未被引用
// return b; (b => 函数堆栈的地址 000111)
// var c = a (); 会把 a 作用域中的 b 值赋给变量 c, 所以 a 作用域不销毁。
// 开始执行 c();
// 形成 c 时候,创建私有作用域,有变量 n 取自上级作用域还是 a.n ;
// 执行 n++; console.log(n);( n => 0 + 1; console.log(1);) // 函数作用域只和在哪里创建有关,和在哪里执行没有关系。

js 面试题总结 3的更多相关文章

  1. 10个常见的Node.js面试题

    如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...

  2. 所在实习公司的JS笔试题

    在班上无聊的时候看到了一份JS笔试题(我是电面进去的,没做过这份题~~),开始还觉得蛮简单......后来觉得还是很有意思的,贴出来一起看看. 题目一: if(!("a" in w ...

  3. 有点难度的JS面试题

    自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...

  4. Node.js面试题之2017

    译者按: 从ECMAScript标准,Node.js语法以及NPM模块角度来看,Node.js的发展让人目不暇接,那么面试题也得与时俱进. 原文: Node.js Interview Question ...

  5. vue.js面试题整理

    Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...

  6. 一道JS面试题引发的血案

    刚入职新公司,属于公司萌新一枚,一天下午对着屏幕看代码架构时. BI项目组长给我看了一道面试别人的JS面试题. 虽然答对了,但把理由说错了,照样不及格. 话不多说,直接上题: var a = 1; s ...

  7. js经典试题之常用的方法

    js经典试题之常用的方法 1.下面代码输出的值 let s = "bob" const replaced = s.replace('b', 'l') replaced === &q ...

  8. js经典试题之运算符的优先级

    js经典试题之运算符 1.假设val已经声明,可定义为任何值.则下面js代码有可能输出的结果为: console.log('Value is ' + (val != '0') ? 'define' : ...

  9. js经典试题之ES6

    js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending  resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...

  10. js经典试题之w3规范系列

    js经典试题之w3规范系列 1:w3c 制定的 javascript 标准事件模型的正确的顺序? 答案:事件捕获->事件处理->事件冒泡 解析:先事件捕获从windows > doc ...

随机推荐

  1. vue视频: 自定义指令 && 拖拽 && 自定义键盘信息

    v-textv-forv-html 指令: 扩展html语法 自定义指令:1. 自定义属性指令: Vue.directive(指令名称,function(参数){ this.el -> 原生DO ...

  2. Cisco配置发送日志到日志服务器

    Cisco配置发送日志到日志服务器logging 172.16.6.22logging onlogging trap 7  //指定日志消息的级别 (0:紧急(Emergencies) 1:告警(Al ...

  3. 浙江工业大学校赛 画图游戏 BugZhu抽抽抽!!

    BugZhu抽抽抽!! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  4. UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 0: illegal multibyte sequence

    使用Python写文件的时候,或者将网络数据流写入到本地文件的时候,大部分情况下会遇到:UnicodeEncodeError: 'gbk' codec can't encode character ' ...

  5. java-mybaits-00202-DAO-原始DAO开发方法

    原始Dao开发方法需要程序员编写Dao接口和Dao实现类. 原本的ibatis的           需要在dao实现类中注入一个SqlSessionFactory工厂. 1.思路 程序员需要写dao ...

  6. HTML基础之DOM常用操作

    DOM(Document Object Model ),文档对象模型,主要用于对HTML和XML文档的内容进行操作. 一.查找节点 直接获取标签 document.getElementById('i1 ...

  7. Spark ListenerBus 和 MetricsSystem 体系分析

    转载自:https://yq.aliyun.com/articles/60196 摘要: Spark 事件体系的中枢是ListenerBus,由该类接受Event并且分发给各个Listener.Met ...

  8. leetcode 数据库题解

    184. Department Highest Salary 题意: The Employee table holds all employees. Every employee has an Id, ...

  9. mysql主从复制,及扩展

    一.MySQL简单复制相关概念: 1. mysql复制的意义:Mysql复制是使得mysql完成高性能应用的前提 2. mysql复制的机制: SLAVE端线程: IO thread: 向主服务请求二 ...

  10. 关于Oracle误操作--数据被Commit后的数据回退恢复(闪回)

    今天操作Oracle数据库时,做一个Update数据时,不小心少写了个where,看这粗心大意的. 于是乎,把所有的员工工号都给更新成一个同一个工号了.这是一个悲催的故事. 因为工号是Check了好多 ...