函数

函数(万物皆对象)

函数表达式

//1.函数声明方式function关键字(命名函数)
function fn(){};

//2.函数表达式(匿名函数)
var fun=function(){};

//3.利用new Function(‘参数1’,‘参数2’,‘函数题’);
var f=new Function('a','b','console.log(a+b)');
f(1,2);
console.dir(f);//可以显示一个对象所有的属性和方法
console.log(f instanceof Object);//判断前者属不属于后者,返回true
  • Function里面参数都必须是字符串格式
  • 第三种方法执行效率低,不方便书写
  • 所有函数都是Function的实例(对象)
  • 函数也属于对象
Function.prototype
Function构造函数.costructor
f._proto_
Function构造函数
Function原型对象
f对象实例

函数的调用

//1.普通函数
function fn(){
     console.log('小楠楠爱前端‘);
     }
 fn();fn.call()//调用
 
//2.对象的方法
var o={
     sayHi:function(){
     console.log('');
     }}
  o.sayHi();
  
//3.构造函数
function Star(){};
new Star();

//4.绑定函数事件
btn.onclick=function(){};

//5.定时器函数
setInterval(function(){},1000);//这个函数定时器自动一秒钟调用一次
window.steTimeout(function(){
     console.log(‘定时器的this:’+this);
     },1000);
      
//6.立即执行函数
(function(){
        console.log('');
        })()//立即执行就是会自动地调用

函数内this的指向

调用方式this指向
普通函数调用window
构造函数调用实例对象,原型对象里面的方法也指向实例对象
对象方法调用该方法所属对象
事件绑定方法绑定事件对象
定时器函数window
立即执行函数window
改变函数内部this指向
①call()

call可以调用函数;改变函数内的this指向

  • 主要作用是可以实现继承
var o={
         name:'nn"}
function fn(a,b){
       console.log(a+b);
       };
 fn.call(o,1,2);
 
 //实现继承
 function Father(uname,age,sex){
       this.uname=uname;
       this,age=age;
       }
 function Son(uname,age,sex){
      Father.call(this,uname,age,sex);//把father里面的this给Son,实现继承
      }
  var son=new Son('','','',);
②apply()
  • apply方法调用一个函数,简单理解为调用函数的方式,但是它可以改变函数的this指向
  • fun,apply(thisArg,[argArray])
  • thisArg:在fun函数运行的时候指定的this值
  • argArray:传递的值,必须包含在数组里面
  • 返回值就是函数的返回值,因为它就是调用函数
    var o={ name:'nannan'; }; function(){ console.log(this); console.log(arr);//'pink' }; fn.apply(o,[‘pink’]);//把函数内部的指向o;

注意

  • 它的参数必须是一个数组,(伪数组)
  • apply()的主要应用,你比如说可以利用apply借助于数学内置对象求最大值Math.max();
    ``
    var arr =[1,2,3,4,5,6,8]
    var max=Math.max.apply(Math,arr);
    console.log(max);
③bind()捆绑,绑定

bind()方法不会调用函数,但是能改变函数内部this的指向
fun.bind(thisArg,arg1,arg2。。)

  • thisArg:在fun函数执行时指定的this值;
  • arg1,arg2:传递的其它参数;
  • 返回由指定的this值和初始化参数改造的原函数拷贝
    var o={ name:'andy' }; function fn(a,b){ console.log(this);//普通函数的this指向的是window console.log(a+b); }; var f=fn.bind(o,1,2); f();
  • 1.不会调用原来的函数,**可以改变原来函数内部的this的指向。**因为不会调用所以返回的是一个新的函数
  • 2.返回的是原函数改变this之后产生的新函数
  • 3.如果有的函数我们不需要马上调用,但是又想要改变函数内部的this指向时用bind;
  • 4.举个栗子:我们有一个按钮,当我们点击了之后,就禁用这个按钮三秒后重新开启;
//原来的写法
var btn = document.querrySelector('button');
btn.onclick = function() {
            this.disabled = true;//这个this指向的是btn
            var that = this;
            setTimeOut(function) {
                   that.disabled=false;定时器函数里面的this指向的是window
                   },3000);
             }

//现在的写法同时绑定多个按钮
var btns = document.querrySelectorAll('button')';
btn.onclick = function() {
      for (var i=0; i<btns.length; i++){
            btns[i].onclick = function() {
                   this.disabledd = true;
                   setTimeput() {
                   this.disabled = fasle;//定时器里的this指向的btn
                   }.bind(this),3000);//这个bind写在了定时器的外面,而这个定时器函数又绑定了bind的方法,这个this指向的是btn这个对象
                   }
               }     

总结

①区别点

  • call和apply会调用函数,并且改变函数内部this的指向;
  • call和apply传递的参数不一样,call传递参数aru1,aru2形式,apply必须数组形式【arg】
  • bind不会调用函数,可以改变函数内部this的指向;

②主要应用场景

  • call常用来做继承
  • apply经常跟数组有关,比如借助数学对象实现数组最大最小值
  • bind不调用函数,但是还是想改变this指向,比如指定定视器里的this指向
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值