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

函数

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基础复习(二))