No2.6 前端面试题 1. this指向 2. 箭头函数 3. Promise 4. 块级作用域

1. this指向

  1. this指向window
  • 全局对象中的this
  • 全局作用域或者普通函数中的this
  • 匿名函数中的this,因为匿名函数的执行环境具有全局性
  1. 非箭头函数
  • this永远指向最后调用它的那个对象
  • apply,call,bind可以改变this指向
  1. 箭头函数
  • 箭头函数没有this,看外层函数是否有函数,有就是外层函数的this,没有就是window
  1. new 关键词可以改变this的指向

2. 箭头函数

1. 箭头函数介绍
  1. 什么是箭头函数
  • ES6新增特性之一 用=>来定义函数,省去关键字function.箭头函数相当于匿名函数,并简化了函数定义
  • 函数的参数放在=>前面的括号()中,函数体跟在=>后的花括号{}中
// 箭头函数
let fn = (name) => {
    // 函数体
    return `Hello ${name} !`;
};
// 等同于
let fn = function (name) {
    // 函数体
    return `Hello ${name} !`;
};
  1. 箭头函数的参数及函数体
//没有参数,写空括号
    let fn = () => {
        console.log('hello');
    };
//只有一个参数,可以省去参数括号
    let fn = name => {
        console.log(`hello ${name}!`)
    };
//有多个参数,将参数依次用逗号(,)分隔,包裹在括号中
    let fn = (val1, val2, val3, val4) => {
        return [val1, val2, val3, val4];
    }
	
//函数体

//1.如果箭头函数的函数体只有一句执行代码,简单返回某个变量或者返回一个简单的js表达式,可以省去函数体花括号{ }
//返回某个简单变量val
let f = val => val;
// 等同于
let f = function (val) { return val };

//返回一个简单的js表达式num1+num2
let sum = (num1, num2) => num1 + num2;
// 等同于
let sum = function(num1, num2) {
  return num1 + num2;
};
//2.如果箭头函数的函数体只有一句代码,返回的不是变量和简单的js表达式,而是一个对象。
//错误写法—花括号会被解释为函数体
    let getItem = id => {
        id: id,
        name: 'gaby'
    };
//正确写法
    let getItem = id => ({
        id: id,
        name: 'gaby'
    });
//3.如果箭头函数的函数体只有一条语句且不需要返回值(最常用于回调函数),加上void关键字
let fn = () => void doesNotReturn();
//4.箭头函数用于回调函数,常见简洁
//普通函数
    [1, 2, 3].map(function (x) {
        return x + x;
    });
//ES6箭头函数
[1, 2, 3].map(x => x + x);
2. 箭头函数特性
  1. 没有原型
  2. 没有arguments
  3. 不能作为构造函数使用,不能用new
  4. this指向外层第一个函数的this
  5. 不能用call,apply,bind改变this;可以间接改变外层函数的this指向来改变箭头函数的this指向

3. Promise

  1. Promise三种状态
  • pending 初始状态
  • fulfilled/resolved 操作成功
  • rejected 操作失败
  1. pending可以转换成另外两种状态。
  • pending -> fulfilled
  • pending -> rejected
  • 一旦发生,状态就会凝固,不会改变
  1. 自身有all,reject,resolve,race方法
  2. 原型上有then,catch方法
  • resolved 状态下的 promise 只会触发 .then 方法
  • rejected 状态 下的 promise 只会触发 .catch 方法。
  • 如果没有抛出异常.then和.catch返回的都是一个resolved状态的Promise
  • 如果抛出异常,返回的都是一个rejected状态的Promise
  1. async await
  • 同步代码做异步操作,两者必须搭配使用
  • async表明函数内有异步操作,调用函数会返回promise
  • await结果取决于它等待的内容,如果是promise就是promise的结果,如果是普通函数就进行链式调用

4. 块级作用域

  1. 什么是块级作用域
  • 任何一对花括号({})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。
  • 函数作用域: 定义在函数中的参数和变量在函数外是不可见的。
  1. let const
  • 不存在变量提升
  • 不能在同一个作用域内重复声明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值