1. 计算题(函数每一次执行都是形成全新的上下文,和之前形成的上下文没有必然关系 )
var i = 20;
function fn() {
i -= 2;
var i = 10;
return function (n) {
console.log((++i) - n);
}
}
var f = fn();
f(1);
f(2);
fn()(3);
fn()(4);
f(5);
console.log(i);

2 计算题
var n = 0
function a() {
var n = 10
function b() {
n++
console.log(n)
}
b()
return b
}
var c = a()
c()
console.log(n)

3 计算题
let x = 5;
function fn(x) {
return function(y) {
console.log(y + (++x));
}
}
let f = fn(6);
f(7);
fn(8)(9);
f(10);
console.log(x);

4 计算题
let x = 5;
function fn() {
return function(y) {
console.log(y + (++x));
}
}
let f = fn(6);
f(7);
fn(8)(9);
f(10);
console.log(x);

5 计算题
let a = 0,
b = 0;
function A(a) {
A = function (b) {
alert(a + b++);
}//=>第一执行A的时候,把全局A函数重新赋值为里面的新的小函数,后期在执行A,
执行的是赋值后的小函数 (此处小函数是私有上下文中的,但是此时也相当于被外面的A占用了,
所以上下文不会销毁掉的)
alert(a++);
}
A(1);//"1"
A(2); //"4"

6 计算题
var test = (function (i) {
return function () {
alert(i *= 2);
};
})(2);
test(5);
var test = (function (i) {
return function () {
alert(i *= 2);
};
})(2);
test(5);