ES6 let、const 命令附加常见面试题型

let 命令

let命令只在所在的代码块内有效。
{
  let a = 11;
  var b = 111;
}
console.log(a) // a is not defined
console.log(b) // 1
不存在变量提升
// let 声明
console.log(a);// reference error
let a = 11;

// var 声明
console.log(b);// undefined
var b = 11;
暂时性死区
var a = 11;
{
  tmp = 22;// reference error 块级作用域内存在let命令,它所声明的变量就“绑定”这个区域
  let a
}
不允许重复声明
// 'a' has already been declared
function fn(){
  let a = 11;
  var a = 1;
}

// 'a' has already been declared
function fn(){
  let a = 11;
  let a = 1;
}

const 命令

const声明一个只读的常量。一旦声明,常量的值就不能改变。
const P = 100;
console.log(P) // 100 
P = 200;
//  TypeError: Assignment to constant variable.
const保证变量指向内存地址不得改动
const a = [];
a.push('Hello'); // 可执行
a.length = 0;    // 可执行
a = ['Dave'];    // 报错

顶层对象属性

顶层对象的属性与全局变量是等价
window.a = 11;
console.log(a) // 11

a = 22;
console.log(window.a) // 22
let命令、const命令与顶层对象脱钩
var a = 11;
console.log(window.a) // 1

let b = 22;
console.log(window.b) // undefined

前端常见相关面试题型

一、与作用域相关题目;

题目1:

function fn1(){
	a = 11;
}
fn1();
console.log(a);

function fn2(){
  var b = 22;
}
fn2();
console.log(b);

function fn3(){
  let c = 33;
}
fn3();
console.log(c)

答案1:

// 11
// b is not defined
// c is not defined
二、与for循环相关题目

题目1:

for (var i = 0; i < 3; i++){
  console.log(i)
}
console.log(i)

fot (let j = 0; j < 3; j++){
  console.log(j)
}
console.log(j)

答案1:

// 0 1 2
// 3
// 0 1 2
// j is not defined

题目2:

for (let i = 0; i < 3; i++) {
  let i = 'aaa';
  console.log(i);
}

for (var j = 0; j < 3; j++) {
    var j = 'bbb';
    console.log(j);
}

答案2:

// 'aaa'  'aaa'  'aaa'
// 'bbb'

题目3:

for (var i = 0; i < 3; i++) {
    let i = 'aaa';
    console.log(i);
}

for (let j = 0; j < 3; j++) {
    var j = 'bbb';
    console.log(j);
}

答案3:

// 'aaa' 'aaa' 'aaa'
// Identifier 'j' has already been declared.

题目4:

var a = [];
for (let i = 0; i < 5; i++){
  console.log(i);
  a[i] = function(){
    console.log(i)
  }
}
a[3]();

var b = [];
for (var j = 0; j < 5; j++){
  console.log(j);
  b[j] =function(){
    console.log(j)
  }
}
b[3]();

答案4:

// 0 1 2 3 4 
// 3
// 0 1 2 3 4
// 5
三、与setTimeout相关题目

题目1:

for(var i = 0;i < 10; i++){
  console.log(i);
  setTimeout(function () {
    console.log(i);:
  },0);
}

for(let j = 0;j < 10; j++){
  console.log(j);
  setTimeout(function () {
    console.log(j);
  },0);
}

答案1:

// 0 1 2 3 4 5 6 7 8 9
// 10 10 10 10 10 10 10 10 10 10
// 0 1 2 3 4 5 6 7 8 9
// 0 1 2 3 4 5 6 7 8 9
四、与闭包相关题目

题目1:

for (var i = 0; i <= 5; i++) {
    (function() {
        setTimeout( function timer() {
            console.log(i);
        },i*1000 );
    })();
}

for (var j = 0; j <= 5; j++) {
    (function() {
        var a = j;
        setTimeout( function timer() {
            console.log(a);
        },a*1000 ); 
    })();
}

for (var k = 0; k <= 5; k++) {
    let b = k;
    setTimeout(function timer() {
        console.log(b);
    },b*1000);
}

答案1:

// 6 6 6 6 6 6
// 0 1 2 3 4 5
// 0 1 2 3 4 5

参考文献

阮一峰老师的 ECMAScript 6 入门


点赞 评论 收藏 ~~ 今天的学习记录暂时到这...... ~~ 点赞 评论 收藏
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shaoin_2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值