闭包,this。

2018-01-03  本文已影响0人  pawN_f294

闭包

  function fn (name) {
    return function (value) {
      console.log(`${name}: ${value}`)
    }
  }
  var fn1 = fn('huang');
  fn1('maxuan');
  fn1('pawn');

This

先看一下this在不同调用场景下的指向。
function fn () {
    console.log(this);
 }
 fn () // window

在严格模式下this的值为undefined,在非严格模式下this值会被转换为window

  var obj = {
    fn: function () {
      console.log(this);
    }
  }
  obj.fn(); // obj
  function fn () {
    console.log(this);
  }

  document.body.click = fn(); // body元素
function Person(name, age) {
    this.name = name;
    this.age = age;
}

var hmx = new Person('hmx', 18); // this为hmx对象
- 函数的上下文还可以是我们指定,使用call applybind
call: 第一个参数为要指定this对象,后面的参数会按顺序传给函数。
  var obj = {
    name: 'pawn'
  }
  function fn (value) {
    console.log(this.name); // pawn
    console.log(value) // 123
  }
  fn.call(obj, 123);
apply:第一个参数也是要指定的this对象,第二个参数接收一个数组或类数组(arguments / nodeList),然后分解为数组的参数。
  var obj = {
    name: 'pawn'
  }
  function fn () {
    console.log(this.name);
    console.log(arguments[0]); // 1
    console.log(arguments[1]); // []
    console.log(arguments[2]); // {}
  }
  fn.apply(obj,[1, [], {}]);
bind:第一个参数为指定的this对象,后面的参数会按顺序传给函数, 该方法会反回一个指定this值的函数。
  var obj = {
    name: 'pawn'
  }
  function fn () {
    console.log(this.name);
  }
  var fn1 = fn.bind(obj);
  fn1(); // pawn
上一篇 下一篇

猜你喜欢

热点阅读