JS里的函數(shù)

1. 五種聲明方式

1.1 具名函數(shù)
function f(x,y) { return x+y }
f.name // 'f'

1.2.匿名函數(shù)
var f;
f = function(x,y){
return x+y
}
f.name // 'f'

1.3 具名函數(shù)賦值
var f;
f = function f2(x,y){ return x+y }
f.name // 'f2'
console.log(f2) // undefined

1.4 window.Function
var f = new Function('x','y','return x+y')
f.name // "anonymous"

1.5 箭頭函數(shù)
var f = (x,y) => { return x+y}
var sum = (x,y) => x+y
var n2 = n => n*n

2. 函數(shù)的本質(zhì)

函數(shù):可以執(zhí)行代碼的對(duì)象就是函數(shù)。

函數(shù)調(diào)用:f.call(undefined,1,2)

從第二個(gè)開(kāi)始傳第一個(gè)參數(shù)

functionf(x,y){return x+y}
f.call(undefined,1,2)   // 3
f.call(undefined,3,4)  // 7

3. this 和 arguments

如何調(diào)用函數(shù)
f.call(asThis, input1,input2)
其中 asThis 會(huì)被當(dāng)做 this,[input1,input2] 會(huì)被當(dāng)做 arguments
禁止使用 f(input1, input2),因?yàn)閷W(xué)會(huì) .call 才能理解 this

function f(){
    'use strict'
    console.log(this)
    console.log(arguments)
    return undefined
}

f.call(1,2,3) // this 為 1,arguments 為 [2,3]
this: call 的第一個(gè)參數(shù)(undefined)


this.png

arguments:call 的后面的參數(shù)可以用arguments得到

4. Call Stack 和 遞歸

callStack1.png
call Stack2.png

5. 作用域 和 變量提升

作用域1.png

變量提升

變量提升1.png

作用域 與 變量提升的三大面試題

1 拿到題目,先變量提升

var a = 1;
function f1(){
    alert(a) // 是多少
    var a = 2
}
f1.call()  //undefined

2

var a = 1;
function f1(){
    var a = 2
    f2.call()
};
function f2(){
    console.log(a) 
}
f1.call()   //1

3

var liTags = document.querySelectorAll('li')
for(var i = 0; i<liTags.length; i++){
    liTags[i].onclick = function(){
        console.log(i) // 點(diǎn)擊第3個(gè) li 時(shí),打印 2 還是打印 6?
    }
}     //6        
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容