js 面试题总结 3
console.log(a); // undefined
var a = 12; //
function fn() {
console.log(a); // undefined
var a = 13; //
}
fn();
console.log(a); //
- 创建全局作用域;
- 变量提升,声明一个 a 变量、定义一个函数 fn;
- 执行代码;( 变量 a 已提升但未赋值,所以 a = undefined,输出 a 值为 undefined,设置 全局变量 a = 12 )
- 执行 fn,形成一个私有作用域 fn ;
- 私有作用域中的执行过程为:
1)形式参数赋值。没有形式参数;
2)变量提升。提升变量 a ;(私有作用域中,如果定义了变量,那么所有的相同变量名都是同一个)
3)执行代码。局部变量 a已提升还未赋值,所以是 undefined,输出 a 值为 undefined,设置局部变量 a = 13 ; - 输出全局变量 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的更多相关文章
- 10个常见的Node.js面试题
如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...
- 所在实习公司的JS笔试题
在班上无聊的时候看到了一份JS笔试题(我是电面进去的,没做过这份题~~),开始还觉得蛮简单......后来觉得还是很有意思的,贴出来一起看看. 题目一: if(!("a" in w ...
- 有点难度的JS面试题
自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...
- Node.js面试题之2017
译者按: 从ECMAScript标准,Node.js语法以及NPM模块角度来看,Node.js的发展让人目不暇接,那么面试题也得与时俱进. 原文: Node.js Interview Question ...
- vue.js面试题整理
Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...
- 一道JS面试题引发的血案
刚入职新公司,属于公司萌新一枚,一天下午对着屏幕看代码架构时. BI项目组长给我看了一道面试别人的JS面试题. 虽然答对了,但把理由说错了,照样不及格. 话不多说,直接上题: var a = 1; s ...
- js经典试题之常用的方法
js经典试题之常用的方法 1.下面代码输出的值 let s = "bob" const replaced = s.replace('b', 'l') replaced === &q ...
- js经典试题之运算符的优先级
js经典试题之运算符 1.假设val已经声明,可定义为任何值.则下面js代码有可能输出的结果为: console.log('Value is ' + (val != '0') ? 'define' : ...
- js经典试题之ES6
js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...
- js经典试题之w3规范系列
js经典试题之w3规范系列 1:w3c 制定的 javascript 标准事件模型的正确的顺序? 答案:事件捕获->事件处理->事件冒泡 解析:先事件捕获从windows > doc ...
随机推荐
- sqlserver 2012隐藏查询结果窗口
1, 08r2的时候都是可以用 ctrl+r隐藏的 到了2012就不行了 方法 . 2, 快捷键的设置
- poj3449 Geometric Shapes【计算几何】
含[判断线段相交].[判断两点在线段两侧].[判断三点共线].[判断点在线段上]模板 Geometric Shapes Time Limit: 2000MS Memory Limit: 655 ...
- 解决“The remote certificate is invalid according to the validation procedure”问题
在用HttpClient发起https请求时,遭遇了“The remote certificate is invalid according to the validation procedure”异 ...
- 内核通信之Netlink源码分析-用户内核通信原理3
2017-07-06 上节主讲了用户层通过netlink和内核交互的详细过程,本节分析下用户层接收数据的过程…… 有了之前基础知识的介绍,用户层接收数据只涉及到一个核心调用readmsg(), 其他的 ...
- postman:模拟发送一个需要cookie认证的请求
1.chrome 已安装插件intercept. 由于chrome安全的限制,发不出带cookie的请求.如果想要发送带cookie的请求,需要开启Interceptor. 2.chrome 浏览器要 ...
- Kconfig文件说明2
Konfig详解: 当执行#make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是 ...
- 【mybatis】认识selectKey
转:https://mybatis.github.io/mybatis-3/zh/sqlmap-xml.html 对于不支持自动生成类型的数据库或可能不支持自动生成主键 JDBC 驱动来说,MyBat ...
- mysql删除匿名用户
首先使用命令进入数据库 [root@localhost raul]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Co ...
- MySQL中特有的函数CONV函数
CONV函数:用于对数字进行转换,比如将十进制的数字转化成二进制,参数格式convert(N,frombse,tobase) 将数字N从frombase进制转化成tobase进制,并且以字符串的格式返 ...
- JavaScript Ajax上传文件miniupload.js
用到jquery和layer.js (function ($) { $.fn.miniupload = function (options, callback) { var jqDom = $(thi ...