首先,第一个输出,由于前置运算,i要先参与输出,而后再自增,因此输出为0闭包
第二个输出,由于f1和f2是不一样的函数,不共享i变量,因此输出也为0函数
第三个输出,由于是f1,共享i,因此i加了1,输出为1spa
let foo = function(){ let i = 0; return function(){ console.log(i++); } } let f1 = foo(); let f2 = foo(); f1();// 0 f2();// 0 f1();// 1
首先,从函数和下面的闭包能够看出,第一行和第二行代码是迷惑人的,正常思考,输出就是。code
let x = 100; let y = 200; let funA = function(x){ x += 1; let y = 201; let funB = function(){ console.log(x); // 102 console.log(y); // 201 } return funB; } let f = funA(101); f();