1作用域、作用域链
https://www.cnblogs.com/pssp/p/5204324.html
js是词法作用域,就是静态作用域,具体是函数定义的时候确定的
对应动态作用域就是函数调用的时候确定
2执行上下文
https://www.cnblogs.com/pssp/p/5205764.html
3js中的自由变量以及作用域的进阶
https://www.cnblogs.com/pssp/p/5206240.html
其实作用域链在函数定义时已经确定了,作用域链是和函数定义时的位置相关的
var x=10;
function fn(){
console.log(x);
}
function show() {
var x=20;
fn();
}
show(); //输出10
-----------------------
var x=10;
function show() {
var x=20;
function fn(){// 这里定义的fn函数,定义时的作用域链已经确定保存在[[Scope]]属性中,包括show函数中的变量对象和全局变量对象
console.log(x);
}
fn();
}
show(); //输出20
4.闭包
https://www.cnblogs.com/xiaohuochai/p/5728577.html
为什么不会被垃圾回收
为什么会这样呢?原因就在于f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收