经典面试题(11):关于变量提升,以下代码将输出什么?
看下面的代码,输出的结果是什么?并解释你的答案。
function test() {
console.log(a);
console.log(foo());
var a = 1;
function foo() {
return 2;
}
}
test();//输出的结果是什么?
答案
这段代码的执行结果是undefined
和2
。
导致这个结果的原因是:变量和函数都被提升到了函数体的顶部。
什么叫提升?是这样子的,Js代码的编译阶段会找到所有的声明,包括变量声明var a
和函数声明function foo(){}
在内的所有声明都会在代码被执行前的编译阶段首先被处理,就好像变量声明和函数声明从他们代码中出现的位置被移动到执行环境的顶部,这个过程就叫做提升。
需要注意的是:只有声明操作会被提升,赋值和逻辑操作会被留在原地等待执行。
因此,当打印变量a
时,由于变量提升的原因,它已经被声明了,所以这个时候去访问变量a
并不会报错。但它只是被声明了,未被赋值(赋值出现在打印之后再执行),所以它的值是undefined
。
换言之,上面的代码其实是等同于下面的代码:
function test() {
var a;//提升到执行环境顶部
function foo() {
return 2;
}
console.log(a);
console.log(foo());
a = 1;
}
test();
热门文章
原创教程:
附加习题:
职场焦虑:
感到迷茫:
培训出身:
培训费用:
搞笑黑话:
职业自由:
职场形象:
经典面试题(11):关于变量提升,以下代码将输出什么?相关推荐
- JS面试题-闭包异步-变量提升-引用传值-this
闭包面试题和异步的题目 var name = "The Window";var object = {name: "My Object",getNameFunc: ...
- c语言专业面试,10道嵌入式C语言经典面试题
10道嵌入式C语言经典面试题 1.分析下面的C代码,它的运行结果可能是: #include int main(void) { int i = 0; if (i = 1) printf("i ...
- 浅谈js中的var和function变量提升,var声明变量提升,块级作用域中的函数提升
1.首先最常见的一种变量提升 console.log(a); //输出 undefinedvar a=10;console.log(a) // 输出 10 var 有提升的作用其实上面的代码会变成会变 ...
- 函数提升与变量提升常见面试题
函数提升与变量提升 在JavaScript中,变量的定义和函数的定义都会被提升,而且函数的声明优先于变量的声明:在变量中,变量的赋值不会被提升,只是声明被提升了,但是函数的声明有点不一样,如果是函数式 ...
- 前端面试instanceof_一起回归一下每日一题这些经典面试题
" 需求已改活已加,加班通宵看朝霞.终是上线已延期,bug还是改不完. 面试造火箭,工作拧螺丝,虽然我只想拧螺丝,可是我需要用造火箭的技术去寻找拧螺丝的工作,如何能在面试过程中让自己处于不败 ...
- java面试题_阿里大厂流出的数百道 Java 经典面试题
BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...
- 企业运维经典面试题汇总(2)
1.写一个脚本查找最后创建时间是三天前,后缀是*.log的文件并删除 find .-ctime +3 -name '*.log' | rm -rf 2.统计ip访问情况,要求分析nginx访问日志,找 ...
- 2023秋招大厂经典面试题及答案整理归纳(201-220)校招必看
目录 201.数组al[O,mid-l]和al[mid,num-l],都分别有序.将其 merge成有序数组al[O,num-1],要求空间复杂度0(1). 202. 一个url指向的页面里面有另一个 ...
- 2023秋招大厂经典面试题及答案整理归纳(141-160)校招必看
目录 141. 动态连接库的两种方式? 142. IP组播有那些好处? 143. 列举几种进程的同步机制及优缺点 144. 什么是预编译,何时需要预编译? 145. int(*s[10])(int)表 ...
最新文章
- Fedora 15 16 17 18 20无线网卡驱动安装
- 超图桌面版根据现有数据源制作一幅地图简单操作
- 设置vmware vsphere web client_Arduino+前端高级应用-通过WEB网页控制Arduino开发板上的LED灯...
- matlab调用opencv库,matlab调用opencv库
- 错误提示:'……' is not assignable to Android.app.Activity Manifest XML
- [C#参考]字符编码
- VS 2015 64位CMake编译openCV3.1.0必备文件
- LINUX下查看Apache并发请求数及其TCP连接状态
- HTML5 input新增属性
- 小甲鱼python【魔法方法-算数运算】学习笔记
- MyEclipse添加反编译工具
- 华为数通HCIA笔记——路由基础
- CPU 显卡详细讲解
- 下载 沙耶之歌Android_沙耶之歌安卓版
- 从头再学java系列之char和Character的区别及Character的源码分析
- 照片拼图软件:Picture Collage Maker for Mac
- Oracle 的 表空间(Tablespace)、用户(User)、模式(Schema)
- Note: LSR LER
- 【美团秋招笔试】美团第一次笔试 2022-8-20
- web前端-综合应用案例-简历表页面的制作-educoder
热门文章
- 在互联网公司工作是种怎样的体验?
- 我的世界java加入更多床_《我的世界》床的N种玩法,教你如何更快地入眠
- k2p华硕系统怎么设置_Linux怎么设置系统环境变量之export命令详解
- 地方政府大数据发展的现实与理想
- 作者:许方圆,男,国网能源研究院能源决策支持技术研发中心中级工程师。...
- 作者:王绍卿, 男, 中国人民大学信息学院博士生, CCF学生会员。
- 工作中由于任务分配注意问题
- RabbitMq队列 queue
- 【VBS】一款无聊的 Visual Basic Script 表白程序
- 【Java】HashMap构建登录程序