闭包
形成一个不销毁的私有作用域才是闭包 函数在执行时 形成一个私有作用域 保护里面的变量不受外界的干扰 这种保护机制 称为闭包
闭包的应用
- 柯里化函数 把多参数的函数变成单参数的函数
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);
- 利用闭包机制隔离全局命名空间
(function(){
//自执行函数也是闭包
let a = 1; //a是一个私有变量 不会影响全局作用域中的变量名
})();
- 惰性封装
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 新增
在形参入口后 => 函数体
- 只有一个形参
let a = s=>{
函数体
}
- 函数只有一行代码 或 只有return指定返回值
let a = (s,m)=>s + m;
i++ 和 ++i
- i++ 先取当前值进行计算 再加1
- ++i 在加1 用得到的结果 再进行计算