讀這篇文章之前我們先來看一段代碼:
var num = 1;
function fn() {
var num = 2
return function() {
console.log(num)
}
}
var f = fn();
f();
~function () {
var n = 3
f();
} ();
是否能寫出準(zhǔn)確的答案?
如何查找當(dāng)前作用域的上一級(jí)作用域酿傍?
看當(dāng)前函數(shù)是在哪個(gè)作用域下定義的烙懦,那么它的上級(jí)作用域就是誰,和在哪兒執(zhí)行的沒有任何關(guān)系
作用域練習(xí)題
題1
// i++ ++i 都是自身累加1赤炒,在和其他的值進(jìn)行運(yùn)算的時(shí)候是有區(qū)別的
// i++ 先拿i的值進(jìn)行運(yùn)算氯析,運(yùn)算完成本身在+1
// ++i 先本身累加1,然后拿累加完成的結(jié)果去運(yùn)算
function fn() {
var i = 10;
return function (n) {
console.log(n + (++i))
}
}
var f = fn();
f(10) // 21
f(20) //
f()(10)
f()(20)
// 關(guān)鍵點(diǎn):作用域是否銷毀
題2
function fn(i) {
return function (n) {
console.log(n + i++);
}
}
var f = fn(13);
f(12)
f(14)
fn(15)(12)
fn(16)(13)