美文网首页
2018-07-22 学习总结

2018-07-22 学习总结

作者: 小本YuDL | 来源:发表于2018-07-23 08:45 被阅读0次
    1.闭包

    1.闭包就是函数的返回值也是个函数
    当一个函数的返回值也是一个函数时,其内部的局部变量还被新函数引用,内部变量的使用就会造成错误。
    注意:返回函数不要引用任何循环变量,或者后续会发生变化的变量(例如for循环的变量)
    eg:

    function count() {
        var arr = [ ];
        for (var i=1; i<=3; i++) {
            arr.push(function () {
                return i * i;
            });
        }
        return arr;
    }
    var results = count();
    f();//此时内层函数for的i已经变为4,在被外层函数使用,得到的值最终是16
    

    2.解决方法:再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变。
    eg:

    function count() {
        var arr = [];
        for (var i=1; i<=3; i++) {
            arr.push((function (n) {
                return function () {
                    return n * n;
                }
            })(i));//把该函数的参数绑定 i 当前的值
        }
        return arr;
    }
    

    创建一个匿名函数并立刻执行,形如:
    (function (x) { return x*x } (3))

    2.箭头函数

    1.箭头函数相当于匿名函数,并且简化了函数定义。
    形式: x => xx;
    等价于:
    function( x) {
    return x
    x;
    }
    箭头函数有两种格式:
    第1种是只包含一个表达式,连{ ... }和return都省略掉了。
    eg:

    x => x*x;
    

    第2种可以包含多条语句,这时候就不能省略{ ... }和return:
    eg:

     x => {
       if(x >0)
             return  x*x ;
       else
            return x*(-x);
    }
    

    两个参数,括号括起来: (x, y) => x * x + y * y;

    如果返回对象,因为函数体{.....}会与对象冲突,所以改变为(....):
    x = ( { foo:x } );

    箭头函数的this的指向和作用域是根据上下文决定的。也更加方便的解决了之前出现的this指向对象问题。
    箭头函数完全修复了this的指向,this总是指向词法作用域,也就是外层调用者xiaoming。

    var xiaoming = {
        name:'小明 ',
        birth: 1990,
        getAge: function () {
            var b = this.birth;   // 1990
            var fn = () => new Date().getFullYear() - this.birth; // this指向xiaoming
            return fn();
        }
    };
    xiaoming.getAge(); // 28
    

    由于this在箭头函数中已经按照词法作用域绑定了,所以,用call()或者apply()调用箭头函数时,无法对this进行绑定,即传入的第一个参数被忽略。

    相关文章

      网友评论

          本文标题:2018-07-22 学习总结

          本文链接:https://www.haomeiwen.com/subject/rrilmftx.html