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. tensorflow和python操作中的笔记

    前一段时间做了一些项目,把一些笔记放在了txt中,现分享出来,自己也能够时长预习. 1) 读取文件时,将固定的文件地址,采用数组或者字符串的形式,提前表示出来,后期使用时候采用拼接操作 2) # 得到 ...

  2. Oracle管理监控之使用utl_mail自动邮件报警配置

    --代发邮件存储过程源码如下: CREATE OR REPLACE PROCEDURE send_mail(p_recipient VARCHAR2, -- 邮件接收人                 ...

  3. python中的接口和依赖注入

    首先,我们必须明确的一点是:python里无接口类型,定义接口只是一个人为规定,在编程过程自我约束 python的类是可以写任意个方法的 定义一个接口对继承类进行约束,接口里有什么方法,继承类就必须有 ...

  4. Spongebob and Squares---cf599D(数学公式1 + (1+2) + (1+2+3) +....)

    题目链接:http://codeforces.com/contest/599/problem/D 一个3×5(m×n)的长方形,里面包含15个边长为1的正方形,有8个边长为2的正方形,有3个边长为3的 ...

  5. loki之内存池SmallObj[原创]

    loki库之内存池SmallObj 介绍 loki库的内存池实现主要在文件smallobj中,顾名思义它的优势主要在小对象的分配与释放上,loki库是基于策略的方法实现的,简单的说就是把某个类通过模板 ...

  6. android的selector选择器

    1. drawable/actionbar_compat_item.xml 2.drawable/actionbar_compat_item_pressed.xml 3.drawable/action ...

  7. Myeclipse 2013 professional 破解

    破解前要先关闭Myeclipse2013 1.(1)输入usercode可以随便输入,(2)然后选择Myeclipse的版本,(3)点击systemid按钮 2.然后点击Tools菜单栏下的Rebui ...

  8. Oracle SQL语句积累

    字段合并: select EVFOUNDATIONTYPEA || EVFOUNDATIONTYPEB|| EVFOUNDATIONTYPEC ||EVFOUNDATIONTYPED as b fro ...

  9. mysql数据库访问权限限制设置

    ---只能本地访问,设置随意访问 update user set host='%' where host='localhost': flush privileges; ---随意访问,设置只能本地访问 ...

  10. [转]AJAX 跨源 HTTP 请求

    转自OSChina, 原文: http://www.oschina.net/translate/ajax-cross-origin-http-request 背景 跨源HTTP请求(也称跨域AJAX请 ...