美文网首页
JS 函数的声明和调用

JS 函数的声明和调用

作者: 为什么要简称 | 来源:发表于2019-11-16 17:21 被阅读0次

    函数的定义方式

    1.自定义函数(命名函数)

    funtion fn(){};
    

    2.函数表达式(匿名函数)

    var fun = funtion fn(){};
    

    3.使用new Funtion('p1', 'p2', '函数体')

    //函数体用字符串的形式写入
    var f = new Funtion('p1', 'p2', 'console.log(p1+p2)');
    f(1, 2)
    

    所有函数都是Funtion的一个实例(对象)
    函数也是一种对象

    函数的调用方式

    1.普通函数

    funtion fn(){ console.log('nihao')};
    //调用
    fn();
    //或者
    fn.call()
    

    2.对象的方法

    var x = {
      sayHi:funtion(){
        console.log('nihao');
      }
    }
    //调用
    x.sayHi();
    

    3.构造函数

    funtion Star(){};
    //调用
    new Star();
    

    4.绑定事件函数

    btn.onclick = function(){};
    //点击按钮进行调用
    

    5.定时器函数

    setInterval(funtion(){}, 1000);
    

    6.立即执行函数

    (funtion(){
      console.log('nihao');
    })();
    

    this的指向问题

    this的指向是当我们调用函数的时候确定的,调用方式的不同决定了this的指向不同
    调用方式           this指向
    普通函数调用         window(普通函数是window调用的)
    构造函数调用         实例对象,原型对象里面的方法也指向实例对象
    对象方法调用         该方法所属对象
    事件绑定方法         绑定事件的对象
    定时器函数           window
    立即执行函数         window

    改变函数内部this的指向

    JavaScript提供了一些函数方法帮我们更优雅的处理函数内部的this指向问题,常用的有bind()、call()、apply()三个方法

    1.call方法
    var t = {
      name:'tom'
    }
    
    funtion fn(){
      console.log(this);
    }
    
    fn.call()  //这时候fn函数中的this指向window
    
    fn.call(t)  //这时fn函数中的this指向了t对象
    
    

    这个特性可以用在继承中

    funtion Father(uname , age){
      this.uname = uname;
      this.age = age;
    }
    funtion Son(uname, age){
      //通过call函数将father中的this指向了son
      //son继承了father的构造函数,拥有了uname和age这两个属性
      Father.call(this, uname, age);
    }
    
    
    2.apply方法

    apply()和call()作用一样(参数不同),可以调用一个函数,简单理解为调用函数的方式,但是它可以改变函数的this指向
    fun.apply(thisArg, [argsArray]) (参数必须是数组(伪数组))
    apply主要应用在数组方面

    //数组中没有求最大最小值的方法,但是Math中有
    //可以使用apply方法实现
    var arr = [1, 2, 3, 4, 1];
    var max = Math.max.apply(Math, arr);
    var min = Math.max.apply(Math, arr);
    console.log(max, min);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
    
    3.bind方法

    bing()方法不会调用函数,但是可以改变函数内部this的指向
    fun.bind(thisArg, arg1, arg2, ...)
    返回原函数改造后的一个拷贝

    相关文章

      网友评论

          本文标题:JS 函数的声明和调用

          本文链接:https://www.haomeiwen.com/subject/mquyictx.html