01.this

this的指向完全由函数在哪里调用决定。

  • 在ES5中,this永远指向调用它的那个对象;
  • 在ES6的箭头函数中没有this绑定,this指向箭头函数定义时作用域中的this;

判断this的指向

  • 全局作用域、自执行函数、定时器传进的非箭头函数的this都指向window
  • 严格模式下(use strict),全局作用域中的this,指向undefined
  • 构造函数中的this指向当前实例
  • 事件绑定函数中的this指向当前被绑定的元素
  • 箭头函数中的this指向定义箭头函数上级作用域中的this

改变this的指向

  • 使用call,apply,bind。call和apply改变this指向时,函数会立即执行,bind不会

  • 保存成变量(let selt = this)

  • 使用箭头函数

  • 使用new实例化一个对象

  • 严格模式下直接调用this指向undefined

02.柯里化的概念

柯里化是一种函数的转换。指将一个函数从可调用的f(a,b,c)转换为f(a)(b)(c)

主要运用了js中函数作为返回值这一特性。

//原函数
function sum(x, y, z) {
    return x + y + z
}

console.log(sum(1, 2, 3))

//柯里化该函数
function sum1(x) {
    return function (y) {
        return function (z) {
            return x + y + z
        }
    }
}

console.log(sum1(1)(2)(3))

//箭头函数更为简洁
var sum2 = x => y => z => {
    return x + y + z
}
console.log(sum2(1)(2)(3))