美文网首页
【管子先生的Node之旅·2】JavaScript基础复习(二)

【管子先生的Node之旅·2】JavaScript基础复习(二)

作者: 管子先生 | 来源:发表于2017-10-27 13:33 被阅读0次

    函数

    JavaScript 世界中函数是一等公民,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值、传参、返回,这样的函数也称之为第一级函数(First-class Function)。不仅如此, JavaScript 中的函数还充当了类的构造函数的作用,同时又是一个 Function 类的实例( instance)。这样的多重身份让 JavaScript 的函数变得非常重要。

       //定义一个函数
        var a = function(val) {
            return val;
        };
        console.log(a); //函数当作参数传递
        a(2); //函数当作方法执行
    

    JavaScript中所有的函数都可以进行命名。但是有一点很重要,就是你要能区分出函数名与变量名。

        var a = function a(){
            return  'function' == typeof a; //=>true
        }
    

    this、.call、.apply

    下述 a() 被调用时this指向的是全局变量 window ( Node 环境下是 global ):

        function a() {
            return window == this;
        }
        a(); //=>true
    

    this 的值可以通过 .call.apply 方法来改变:

        function a() {
            return this.b == 'hello';
        }
        a.call({ b: 'hello' });
    

    .call.apply 方法不同之处在于,.call 接受参数列表,而 .apply 则是参数列表数组:

        function a(b, c) {
            return b + c + this.d;
        }
        a.call({ d: '!' }, 'hello', ' World'); //=>hello World!
        a.apply({ d: '!' }, ['hello', ' World']); //=>hello World!
    

    函数的参数数量

    JavaScript 函数有一个很有意思的属性——参数数量,该属性指明了函数声明时可接受多少个参数,在目前很多框架中就根据这个属性,根据不同参数数量提供不同的功能。在 JavaScript 中,该属性名为:

        var a = function(a, b, c) {};
        a.length; //=>3
    

    闭包

    闭包的原理就是在 JavaScript 中,每次函数调用时,新的作用域就会产生:

        var a = 5;
        function af() {
            a == 5; //=>false
            var a = 6;
            function bf() {
                a == 6; //=>true
            }
            bf();
        }
        af();
    

    自执行函数是一种机制,通过这种机制声明和调用一个匿名函数,能够达到仅定义一个新的作用域的作用:

        var a = 3;
        (function() {
            var a = 5;
        })();
        a == 3; //=>true
    

    自执行函数对声明私有变量时非常有用的,这样就可以让私有变量不被其他代码访问。

    相关文章

      网友评论

          本文标题:【管子先生的Node之旅·2】JavaScript基础复习(二)

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