首先,第一個輸出,由於前置運算,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();