函數(shù)的 5 種聲明
具名函數(shù)
function f(x,y){
return x+y
}
f.name // 'f'
匿名函數(shù)
var f
f = function(x,y){
return x+y
}
f.name // 'f'
具名函數(shù)賦值
var f
f = function f2(x,y){ return x+y }
f.name // 'f2'
console.log(f2) // undefined

面試會(huì)問(wèn)
window.Function
var f = new Function('x','y','return x+y')
f.name // "anonymous"
箭頭函數(shù)
var f = (x,y) => {
return x+y
}
var sum = (x,y) => x+y
var n2 = n => n*n
面試會(huì)問(wèn):函數(shù)的name屬性

image.png
如何調(diào)用函數(shù) f.call
f.call(asThis, input1,input2)
其中 asThis 會(huì)被當(dāng)做 this,[input1,input2] 會(huì)被當(dāng)做 arguments

image.png
this 和 arguments
function f(){
'use strict'
console.log(this)
console.log(arguments)
return undefined
}
f.call(1,2,3) // this 為 1,arguments 為 [2,3]
不使用 'use strict',如果沒(méi)傳參,默認(rèn)this是window,使用 'use strict',如果沒(méi)傳參,默認(rèn)this是undefined
第一個(gè)參數(shù)是this,是為了和Java看起來(lái)像
作用域---類(lèi)似樹(shù)

樹(shù)
每次寫(xiě)題目記得把變量提升(function也是哦)

先打印出undefined在1
易錯(cuò)點(diǎn):f4用的是全局變量的那個(gè)a

image.png
這里第七行加了個(gè)a=2,然后再調(diào)用f4的,所以這時(shí)候a已經(jīng)被賦值2了

無(wú)論點(diǎn)擊哪一個(gè),都是打印length的值,因?yàn)殚_(kāi)始就初始化完畢了,值會(huì)變化
閉包

image.png