js学习笔记--ES6

前言 :ES6新增了若干语法,例如:let 关键字、const 声明常量、解构赋值、箭头函数、剩余参数等;以及ES6的内置对象扩展,包括 Array 的扩展方法、String 的扩展方法还有Set 数据结构等,今天这里只记录一下Let 关键字和箭头函数的经典面试题,想要了解更多请至码云金小壮查看详细笔记。

1. let关键字经典面试题

先说一下let关键字,let关键字是ES6中新增的用于声明变量的,有以下特点:

  • 使用let关键字声明的变量具有块级作用域,在一个大括号中使用let关键字声明的变量才具有块级作用域 var关键字是不具备这个特点的,可以有效防止循环变量变成全局变量。
  • 使用let关键字声明的变量没有变量提升,也就是说必须先声明再使用。
  • 使用let关键字声明的变量具有暂时性死区特性,所以外部全局变量影响不了块级区的let声明的变量。
看以下代码
  • var声明变量
		var arr = [];
        for (var i = 0; i < 2; i++) {
    
    
            arr[i] = function () {
    
    
                console.log(i);
            }
        }
        arr[0](); //2
        arr[1](); //2

上面代码可以看出两次调用函数输出的结果都是一致的为 2 ,执行结构图如下:
在这里插入图片描述
这段代码的关键点在于变量 i 是全局变量,所以函数执行时输出的都是全局作用域下的值。

  • let 声明变量
		let arr = [];
        for (let i = 0; i < 2; i++) {
    
    
            arr[i] = function () {
    
    
                console.log(i);
            }
        }
        arr[0](); //0
        arr[1](); //1

用 let 关键字声明的变量,输出的结果为 0 1,执行结构图如下:
在这里插入图片描述
这次的关键点在于每次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的,函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的 i 值。

2. 箭头函数面试题
  • 箭头函数不绑定this关键字,如果在箭头函数中使用this,this关键字将指向箭头函数定义位置中的this。
  • 箭头函数的优点在于解决了this执行环境所造成的一些问题。比如:解决了匿名函数this指向的问题(匿名函数的执行环境具有全局性),包括setTimeout和setInterval中使用this所造成的问题。
看下面代码
		var obj = {
    
    
            age: 20,
            say: () => {
    
    
                alert(this.age)
            }
        }
        obj.say(); //弹出undefined

上面 this.age 弹出的结果是 undefined,箭头函数this指向的是被声明的作用域里面,而对象没有作用域的,所以箭头函数虽然在对象中被定义,但是this指向的是全局作用域。

  • 在全局作用域下定义 age,则输出的结果便全局作用域下 age 的赋值结果。
        var age = 18;
        var obj = {
    
    
            age: 20,
            say: () => {
    
    
                alert(this.age)
            }
        }
        obj.say(); //弹出18

重点:箭头函数this指向定义它的地方。

猜你喜欢

转载自blog.csdn.net/dairen_j/article/details/108804530
今日推荐