本文作者:vicky? ? 原文出處:http://www.mamicode.com/info-detail-500673.html
1.function 函數(shù)不僅可以調(diào)來(lái)調(diào)去,還可以作為值傳來(lái)傳去
2.scope 作用域 (塊級(jí)作用域籽御,基于函數(shù)的作用域)
清晰的講述作用域http://www.reibang.com/p/a7f9951f329a
函數(shù)作用域是function內(nèi) 在es5 與es6中沒(méi)有改變
塊級(jí)作用域是在es6中體現(xiàn)的 if(){} while(){} 必須用let const 來(lái)聲明變量留搔,這樣才能保證外部不訪問(wèn)塊級(jí)中的變量(感謝作者 讓我清晰的明白)
3.閉包 簡(jiǎn)單的說(shuō)就是一個(gè)函數(shù)里嵌套這函數(shù),閉包所保留的是整個(gè)變量對(duì)象砂吞。來(lái)看一個(gè)閉包經(jīng)典案例
for(var i=1; i<=9; i++) {
? ?setTimeout(function timer(){
? ?console.log( i );
},1000);
}
執(zhí)行結(jié)果 輸出十次10 原因是 setTimeout是異步執(zhí)行 署恍,setTimeout中的匿名function沒(méi)有將 i 作為參數(shù)傳入來(lái)固定這個(gè)變量的值, 讓其保留下來(lái), 而是直接引用了外部作用域中的 i, 因此 i 變化時(shí), 也影響到了匿名function。若改為
for(let i=1; i<=9; i++) {
setTimeout(function timer(){
console.log( i );
},1000);
}
運(yùn)用閉包
function Person(name) {
????????function getName() {
? ? ? ? ? ?console.log( name );
?}
? ? ?return{
? ? ? ? getName: getName
? ? ? };
}
var? ?littleMing = Person( "fool");
littleMing.getName();