百度百科摘要:
闭包就是能够读取其他函数内部变量的函数。例如在 JavaScript 中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
Q1:
function Foo() {var i = 0;console.log(i)return () => console.log(i++);}var f1 = Foo(), f2 = Foo();f1();f1();f2();
控制台输出:

分析:
-
此题目的考察点在闭包和引用类型对象,首先
Foo是引用类型存储在堆中,而变量f1、f2存储是在栈中; -
var f1 = Foo()首先Foo()执行,输出0,返回一个函数体,f1指向返回的函数体。
var f2 = Foo()同样执行Foo(),和f1不同的是这是一个新的内存地址,输出0,返回一个函数体,f2指向返回的函数体。 -
f1()第一次执行,即返回的函数体执行,因为自身没有 定义i,所以向上找父函数定义的i,输出i++即为0 -
f1()第二次执行,再次执行返回的函数体,输出的是父函数的i = 1,i++,输仍为1; -
f2()第一次执行,f2执行的是新的Foo()执行返回的函数体,因此其内部定义的变量和f1中没有任何关系。其父函数的i为0,输出i++即是0


















