码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-10-07 20:22:08      阅读:195      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!