js笔记-函数

概念

  • 函数是一块JavaScript代码,被定义一次,但可执行和调用多次.
  • JS中的函数也是对象,所以JS函数可以像其他那样操作和传递所以我们也常叫JS中的函数为函数对象
  • 函数使用return返回值,如果没有return就会返回undefined

声明

  • 函数可以函数声明和函数表达式,函数构造器
  • 函数声明:
    function fn(){
    
    };
    
  • 函数表达式
    var fn = function(){
    
    };
    
  • 函数构造器
    var fn = Function('x,a',"");
    

3种声明差别

函数声明 函数表达式 函数构造器
前置
允许匿名
立即调用
函数名调用
没有函数名

arguments函数属性

  • 这是用来查看函数传参
  • arguments.callee查属性包含当前正在执行的函数
  • 注意:严格模式不能使用arguments进行更改传参的值或者使用arguments.callee来进行调用当前函数

call/apply属性

  • call/apply是函数对象的一个方法,它的作用是改变函数调用对象,它的第一个参数就是表示改变后的调用这个函数的对象
  • 示例代码:
    var arr = [1,2,3,4,5];
    arr.join("_");//1_2_3_4_5
    Array.prototype.join.call(arr,"_");//1_2_3_4_5
    
  • 使用场景:
    • 当一个构造方法不存在此方法时,但是其他构造方法或对象存在则可以使用call/apply来调用
  • call/apply的区别:
    • call第一个为传入对象,第二个即后面为传参
    • apply第一个为传入对象,第二个为数组

bind方法

  • bind绑定函数
    • function.bind(this,arg)
      this.x = 9;
      var module = {
          x:81,
          getX:function(){
              return this.x;
          }
      }
      // 直接调用
      module.getX()//81
      // 赋值给getX
      var getX = module.getX;
      getX();//9
      // 使用bind绑定module
      var boundGetX = getX.bind(module);
      boundGetX();//81
      // 使用bind绑定一个对象
      var boundGetX = getX.bind({x=77});
      boundGetX();//77
      
    • bind会新建一个函数并且this对象会解析为传入的对象,bind第一个传入对象第二个即后面为函数传参
    • 常见使用情况:使用回调等方式导致this指向更改的就可以使用这个将this重新绑定会原来的
  • 函数currying化
    • 使用bind可以预定义函数函数传参
    • 示例代码:
      function add(a,b,c){
          return a + b + c;
      }
      //100绑定给add的a传参.
      var func = add.bind(undefined,100);
      func(1,2);//103
      
    • 使用场景:对此函数调用传参重复的就可以使用这个方式
  • 函数被new调用后,this会指向有new构造出来的对象,bind解析的this会被覆盖
分享 二维码
分类:代码笔记
标签:
还没有评论


在此输入评论..
0/100