函數

函數(也是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也一樣

 

 

 

 


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