首页 > 编程语言 > 详细

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

时间:2016-10-07 20:21:28      阅读:173      评论:0      收藏:0      [点我收藏+]

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

  • 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)---函数声明

原文:http://www.cnblogs.com/HXW-from-DJTU/p/5936536.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!