读这篇文章之前我们先来看一段代码:
var num = 1;
function fn() {
var num = 2
return function() {
console.log(num)
}
}
var f = fn();
f();
~function () {
var n = 3
f();
} ();
是否能写出准确的答案?
如何查找当前作用域的上一级作用域?
看当前函数是在哪个作用域下定义的,那么它的上级作用域就是谁,和在哪儿执行的没有任何关系
作用域练习题
题1
// i++ ++i 都是自身累加1,在和其他的值进行运算的时候是有区别的
// i++ 先拿i的值进行运算,运算完成本身在+1
// ++i 先本身累加1,然后拿累加完成的结果去运算
function fn() {
var i = 10;
return function (n) {
console.log(n + (++i))
}
}
var f = fn();
f(10) // 21
f(20) //
f()(10)
f()(20)
// 关键点:作用域是否销毁
题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)