js----闭包 this

103 阅读2分钟

闭包

形成一个不销毁的私有作用域才是闭包 函数在执行时 形成一个私有作用域 保护里面的变量不受外界的干扰 这种保护机制 称为闭包

闭包的应用

  1. 柯里化函数 把多参数的函数变成单参数的函数
function fn(a,b,c){
    return a + b + c
}
function fe(a){   //在函数中return函数的做法在市面上人为的闭包
    return function (b){
        return function(c){
            return a + b + c
        }
    }
}
fe(1)(2)(3);
  1. 利用闭包机制隔离全局命名空间
(function(){
    //自执行函数也是闭包
    let a = 1; //a是一个私有变量 不会影响全局作用域中的变量名
})();
  1. 惰性封装
var utils = (function () {
  var version = '1.0.1';
  function sum(a, b) {
    return a + b
  }
  function minus(a, b) {
    return a - b;
  }
  return {
    sum: sum,
    minus: minus
  }
})();

this

this是JS 的关键字 代表当前代码执行的环境对象 一般在函数中使用 并且在函数执行时 根据函数的不同执行方式确定不能同的值

  • 事件函数中的this 指 绑定该事件的函数的元素
  • 自执行函数中的this 指 window
  • setTimeout/setInterval 定时器回调函数中的this 指 window
  • 方法调用时 看方法前面是否有 点 有点 点前面是谁 就是谁 没有 就是指 window
  • 箭头函数中的 this 指向函数定义时所在的作用域中的this
  • 全局作用域中的this 就是window
  • this 在运行时 不能赋值

箭头函数 ES6 新增

在形参入口后 => 函数体

  1. 只有一个形参
let a = s=>{
    函数体
}
  1. 函数只有一行代码 或 只有return指定返回值
let a = (s,m)=>s + m;

i++ 和 ++i

  • i++ 先取当前值进行计算 再加1
  • ++i 在加1 用得到的结果 再进行计算