zoukankan      html  css  js  c++  java
  • Javascript进阶(6)---JS函数

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

     1、函数声明法  

    function add(a, b) {
        a = a + a;
        b = b + b;
    }     

     2、函数表达式法

    • var add = function (a , b){ ......};
    • (function(){......}());
    • return function (){......}
    • 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"关键字样
    • 在以下特殊情况需要有特殊的变化
      • 参数不是一个的情况
        (x,y)=> x + y ; //两个参数
        
        ()=> 500;       //无参数
        
        //可变参数的情况
        (x,y, ...rest) => {
            return x+y;
          }
      • 返回的内容是对象的情况
        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 传入的第一个参数被忽略    
     
  • 相关阅读:
    jvm内存配置参数
    6 个设计原则分别是什么?每种设计原则体现的设计模式是哪个?
    classloader 结构,是否可以自己定义一个 java.lang.String 类,为什么? 双亲代理机制。
    求sum=1+111+1111+........+1....111 .
    交换排序
    字符串压缩 stringZip
    TCP为何采用三次握手来建立连接,若采用二次握手可以吗
    使用jsoup抓取新闻信息
    通过地址获得经纬度(百度Geocoding API)
    FileReader
  • 原文地址:https://www.cnblogs.com/HXW-from-DJTU/p/5936536.html
Copyright © 2011-2022 走看看