語(yǔ)法
function 函數(shù)名([參數(shù)1,參數(shù)2]){
[語(yǔ)句1,
語(yǔ)句2]
return 返回值
}
函數(shù)有變量提升
函數(shù)方法call
fun.call(第一個(gè)參數(shù)[,參數(shù)1,參數(shù)2,參數(shù)3..])
- 函數(shù)fun使用call的 第一個(gè)參數(shù) 就是指向this
- 如果執(zhí)行一個(gè)函數(shù) ft(1) 它就相當(dāng)于是 ft.call(undefined,1)
- this 和 參數(shù) 都是在調(diào)用一個(gè)函數(shù)時(shí)出現(xiàn) , 不調(diào)用就沒(méi)有
函數(shù)var作用域
var a
function f1(){
var a = 1
function f2(){
a = 1
}
function f4(){
var a
}
f2.call()
f3.call()
}
function f3(){
a = 2
}
f1.call()
這個(gè) a = 1 是 f1 的var a , 如果 f1 沒(méi)有聲明 a ,就看 頂級(jí)作用域 有沒(méi)有聲明 , 沒(méi)有的話(huà) 就是Global .
立即執(zhí)行函數(shù)
(function(){
/*code*/
}());
//or
(function(){
/*code*/
})();
上面的兩種寫(xiě)法都要加分號(hào) 不推薦用括號(hào)寫(xiě)法寫(xiě)法 , 因?yàn)榭赡芎蜕弦恍泻系揭粔K
!function(){
}()
generator 函數(shù)
function*(){} //這就叫g(shù)enerator函數(shù)
語(yǔ)法yield「產(chǎn)出」
function* inner() {
yield 'hello!';
}
function* outer1() {
yield 'open';
yield inner();
yield 'close';
}
var gen = outer1()
gen.next().value // "open"
gen.next().value // 返回一個(gè)遍歷器對(duì)象
gen.next().value // "close"
function* outer2() {
yield 'open'
yield* inner()
yield 'close'
}
var gen = outer2()
gen.next().value // "open"
gen.next().value // "hello!"
gen.next().value // "close"
函數(shù)節(jié)流
這點(diǎn)參考JavaScript铸抑,