zoukankan      html  css  js  c++  java
  • 你不知道的JS系列 ( 24 ) - 被忽略的 this

    规则总有例外,这里也一样。如果你把 null 或者 undefined 作为 this 的绑定对象传入 call、apply 或者 bind,应用的是默认绑定规则
    function foo(){
      console.log(this.a);
    }
    var a = 2;
    foo.call(null); // 2
    什么情况会传入 null 呢?
    function foo(a,b){
      console.log("a:" + a + ", b:" + b);
    }
    // 把数组 “展开” 成参数
    foo.apply(null, [2,3]);
    
    // 使用 bind() 进行柯里化 (预先设置一些参数)
    var bar = foo.bind(null, 2);
    bar(3);

    如果函数不关心 this 的话,你仍然需要传入一个占位值,这时 null 啃呢个是一个不错的选择,如果某个函数确实使用了 this,默认规则把 this 绑定到全局对象,这将导致不可预计的后果,比如修改全局对象。



    function foo(a,b){
    console.log("a:" + a + ", b:" + b);
    }
    
    // 我们的 DMZ 对象
    var ø = Object.create(null);
    
    // 把数组 “展开” 成参数
    foo.apply(ø, [2,3]);
    
    // 使用 bind() 进行柯里化 (预先设置一些参数)
    var bar = foo.bind(ø, 2);
    bar(3);

    使用变量名不仅让函数变得更加“安全”,而且可以提高代码的可读性,因为 ø 表示 “我希望 this 是空”,这比 null 的含义更清楚

  • 相关阅读:
    主外键 子查询
    正则表达式
    css3 文本效果
    css3 2d
    sql 基本操作
    插入 视频 音频 地图
    j-query j-query
    document
    js dom 操作
    js
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12446591.html
Copyright © 2011-2022 走看看