函数

函数(也是obj,但是有特殊之处)

1、区别与其他对象的一个核心特性函数是可被调用的

Fun()

//所有object 使用的操作,function也适用

2、回调函数

//作为参数被传递到另一个函数,等待被调用

a=[1,2,3,4,5,-1,-2]

a.sort((a,b)=>{

returnb-a

})

console.log(a);

forEach(()=>{})//对每一个进行处理

利用属性实现带记忆的函数

3、参数

1)rest参数//只能是最后一个参数

let fun=(a ,b ,...q)=>{//定义的时候用…

return q[1]

}

ss = fun(1,2,3,4,5,6)

console.log( ss );

2)arguements//这是一个对象,有length等属性

如何将一个对象变为数组//传入的是一个对象,而不是数组

       1)自己写函数//把每个数都取出来

       2)Array.from(最佳方法)

let fun = function (a, b) {
    let args=Array.from(arguments)
      console.log(args)
}
fun(1, 2, 3, 4, 5, 6)

       3)[].slice.call(arguments)

let fun = function (a, b) {
    //let args=Array.from(arguments)
    let args = [].slice.call(arguments)
    console.log(args)
}
fun(1, 2, 3, 4, 5, 6)

奇怪特性,arguments是传入值,但是如果在函数中被改变,也会改变//相当于别名(可以用static 消除)

3)参数默认值

(a=0,b=1)//默认值放在后面

       arguments总是记录实际传入的

let a=function (v1,v2=v1){

   console.log(v1+v2)

}

a(3)

4)sprea操作符//将数组分解为一组元素后传入方法中

       ...(感觉没区别)

4、函数的四种调用

函数上下文(this访问,一个object或者undefined,作为隐式参数被传递)

作为函数被调用

作为方法被调用

作为构造函数被调用

通过apply或call方法被调用

1)作为函数被调用

       函数声明//function a(){}

       函数表达式// let a=function(){}

       立即调用函数//(function(){})()

       在static下:undefined(this无作用)

       非 static  :全局对象(有副作用)

2)作为方法被调用:(放一个对象的属性的值是函数时,称作是一个方法被调用)

       则this是该对象(被调用时所在的object)

3)作为构造函数被调用

(构造函数的作用:更加方便的创建多个具有共性的object)

let fun = function (){

   this.whoA = () => {

       return this

    }

}

let pa = new fun()

if (pa.whoA() == pa) {

   console.log('dssssssssssssss')

}

       如果没有new,则会表现出‘作为函数被调用’

new非常重要!!!!!!!!!!

****具有原子类型的返回的函数作为构造函数的时候,返回值被忽略,new创建的obj被返回

****具有obj类型的返回的函数作为构造函数的时候,返回值被返回,new创建的obj被忽略

函数的命名约定:构造函数----首字母大写

                            普通函数----首字母小写

如何判断有无加new

//es6新增

let fun = function () {

   if (typeof new.target !== "undefined") {

 

    }

   else{

 

       console.log('plseae add new')

    }

   this.whoA = () => {

       return this

    }

}

//更完美的一种方式

letfun = function () {

    if (typeof new.target !=="undefined") {

 

    }

    else {

        return new fun()

        // console.log('plseae add new')

    }

    this.whoA = () => {

        return this

    }

}

4)通过apply或call方法被调用//一种和setprototypeOf(son,baba)一样的方法

baba.sayhello.call(son,a,b,c)

baba.sayhello.aplay(son,[a,b,c])

//第一个参数为函数调用的上下文

**技巧,apply,array

bind方法:

x.bind(son,...args)

//返回一个函数,行为与x完全相同,上下文被固定为son,永不能改变

***注意事项,箭头函数不能被作为构造函数(没有自己的new,target,没有this,arguments这两个参数,被调用时没有自己的函数上下文)

**箭头函数的this在被创建时确定,永不再变,arguements也一样

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章