首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Js篇-面试题1-有关变量-词法块级作用域

Js篇-面试题1-有关变量-词法块级作用域

作者头像
itclanCoder
发布于 2020-10-28 16:56:28
发布于 2020-10-28 16:56:28
5980
举报
文章被收录于专栏:itclanCoderitclanCoder

变量声明不会提升

直接写出下边程序的输出结果

代码语言:javascript
复制
console.log(foo);
var foo = "test"

答案: undefined

解析: 变量foo,相当于只有var foo;但是却没有赋值,所以值是undefined,并且变量的声明并不会提升,只有函数声明会提升

词法作用域

写出下面一段代码输出结果

代码语言:javascript
复制
var temp = 123;
function f() {
  console.log(temp);
  if(false) {
    var temp = 456
  }
}
f();

答案: undefined

解析: 在没有调用 f 函数时,temp的值是123,在查找变量时,它先会从函数内沿着作用域链逐级向外进行查找,若有则会返回,若无,则会返回undefined,

使用var声明的变量并不会有块级作用域,在if语句块声明赋值的变量,相当于是裸露的,因为在 f函数内,变量先使用,但是未赋值,所以是undeifined

块级作用域

写出下面一段代码输出的结果

代码语言:javascript
复制
var temp = 123;
function f() {
  console.log(temp);
  if(true) {
     console.log(temp);
     let temp = 456;
  }
}
f();

答案: 123,然后报错ReferenceError: Cannot access 'temp' before initialization,无法在初始化之前访问变量

解析: let声明的变量是有块级作用域的,不能重复声明定义

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 变量声明不会提升
  • 词法作用域
  • 块级作用域
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档