美文网首页
函数(Function)

函数(Function)

作者: 大侠走一波 | 来源:发表于2017-02-10 15:29 被阅读6次

    1.函数表达式
    函数可以使用函数表达式来创建,这样的函数可以是匿名的,函数表达式在把一个函数当做参数传递的时候很方便。

    var getArea = function(sideLength){
      return sideLength * sideLength;
    }
    var area = getArea(4);  //area = 16
    

    2.函数提升(function hoisting)是指函数的声明出现在调用之后,可以被提升,仅仅适用于函数声明,而不可以被用在函数表达式上。

    3.嵌套函数和闭包(Nested functions and closures )
    在JavaSript中,函数是允许嵌套的,嵌套(内部)函数对其容器函数(外部)函数是私有的,它自身也形成了一个闭包(closures)。在函数内部定义变量不使用var修饰,定义的将会是全局变量。

    闭包(closures)就是能够读取其他函数内部变量的函数。
    由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成"定义在一个函数内部的函数"。

    闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

    一个例子:

    var object = {
        name: "MyObject"; 
        getNameFunc: function(){
          console.log(this.name);    //这里会输出"MyObject"  
          return function (){
              console.log(this.name);  //走到这句会显示错误:Cannot read property 'name' of undefined.
            }
        } 
    };
    

    更正版本是这个样子:

    var object = {
        name: "MyObject"; 
        getNameFunc: function(){
          console.log(this.name);    //这里会输出"MyObject"  
          var that = this;
          return function (){
              console.log(that.name);  //这里会输出"MyObject"
            }
        } 
    };
    

    4.arguments 对象
    函数的实际参数都会被保存在一个类似数组的arguments对象中,在函数内可以使用arguments[i]找到传入的参数,参数的数量由arguments.length表示。

    5.剩余参数(rest parameters)
    剩余参数允许将不确定数量的参数表示为数组,在下面的例子中,使用剩余参数收集第三个到最后的参数。

    function multiply(mutiplier1,mutiplier2,...theArgs) {
        return theArgs.map(x => mutiplier1 * mutiplier2 * x);  //map根据其后的函数处理,返回一个新数组
    }
    var arr = multiply(3,2,1,2,3);
    console.log(arr);  //输出显示[6,12,18]
    

    6.扩展运算符(spread)
    扩展运算符是三个点(...),好比是rest 的逆运算,将一个数组转为用逗号分隔的参数序列。

    7.箭头函数(Arrow Functions)
    ES6允许使用箭头=>定义函数,
    var foo = v => v ;
    在ES5里等价于

    var foo = function(v){
        return v;
    }  
    

    如果箭头函数不需要参数或者需要多个参数,就使用()来代替参数部分。例如:
    var foo = () => 5; //该函数返回值是 5
    箭头函数代码块最好使用大括号并用return返回
    var sum = (num1,num2) => {return num1 + num2};
    由于大括号被解释为代码块,所以箭头函数直接返回一个对象,需要在大括号外面加上(),例如:
    var foo = id => ({id:id,name:"Trump"})

    箭头函数使用注意:
    ·函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
    ·不可以做构造函数
    ·不可以使用arguments对象,该对象在函数体内不存在,如果要使用,可以用Rest代替。

    相关文章

      网友评论

          本文标题:函数(Function)

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