var定义的是全局变量,你如果要把该变量的作用域限制在该方法中的话,你要使用let来定义变量。
闭包产生的原因是由于内部函数引用了外部函数的变量,当内部函数被返回时内部函数将会保留被引用的变量,这些被保留的变量的集合称之为闭包。 如son函数引用了fun函数的变量a,所以当fun函数执行完后,a变量依然会存在,依然可以访问
当一个函数被创建并传递或从另一个函数返回时,它会携带一个闭包,闭包中是函数声明时作用域内的所有变量。