首页 > 代码库 > Javascript进阶(6)---函数声明

Javascript进阶(6)---函数声明

-------------

  • JS中的函数也是一种对象
  • 函数的返回值是return来决定的,没有则返回undefined

     1、函数声明法

    1. function add(a, b) {    a = a + a;    b = b + b;}     
      2、函数表达式法
    2. var add = function (a , b){ ......};
    3. (function(){......}());
    4. return function (){......}
    5. var add =function foo(a,b){......}; //命名式函数表达式,存在兼容问题,并不常用
      • 为什么函数声明的前面可以提前调用该函数?
        • 因为函数声明在加载时是被预先处理的,而函数表达式中,只有函数里声明的变量会被预先处理。
        • add(5,4);var add =function foo(a,b){alert(a+b)};
        • 而函数表达式本身并不会。所以,在函数表达式前调用该函数则会报错。
        • (暂时没想到栗子)

      3、Function 构造器

      • var func = new Function(‘a‘,‘b‘,‘console.log(a+b);‘)func(4,5);

      4、箭头函数

      • 在ES 6 标准下新增加了一种函数:箭头函数
      • 例如:
        x => x*x //等价于function (x){    return x*x;  }

         

      • 箭头相当于省略了"function"、"{}"、"return"关键字样
      • 在以下特殊情况需要有特殊的变化
        1. 参数不是一个的情况
          (x,y)=> x + y ; //两个参数()=> 500;       //无参数//可变参数的情况(x,y, ...rest) => {    return x+y;  }
        2. 返回的内容是对象的情况
          x => { foo : x}     //错误写法x => ({foo : x })   //正确写法
        • 箭头函数完全修复了 this 关键字的指向问题,在箭头函数中,this总是指向词法作用域,也就是外层调用者
          var obj_arrow = {  birth:1990,  getAge:function(){    var b = this.birth;    var fn = ()=>new Date().getFullYear()-this.birth;    return fn();  }}console.log(obj_arrow.getAge());  //26 这里的this 直接指向obj
          箭头函数使用 applycall 时候,因为其内部的 this 以固定指向此法作用域,则 call apply 传入的第一个参数被忽略        

 

 

 

 

 

 

 

 

 

Javascript进阶(6)---函数声明