var year = '2022'
function foo() {
var name = "foo"
var age = 18
function bar() {
console.log(name)
console.log(age)
}
return bar
}
var fn = foo()
fn()
初始化全局对象
js引擎会在执行代码之前,会在堆内存中创建一个全局对象:Global Object(GO)
-
该对象在所有的作用域(scope)都可以对其进行访问;
-
里面会包含Date、Array、String、Number、setTimeout、setInterval等等;
-
其中还有一个window属性指向自己;
执行上下文栈(调用栈)
GEC被放入到ECS中解析代码
GEC开始执行代码
遇到函数调用-解析函数
遇到函数调用-执行函数
当FOO函数执行完成之后,调用栈里面的函数执行上下文就会被垃圾回收,但是Foo-Ao对象并不会被回收,那是因为从全局对象GO出发对其进行了引用。
遇到函数调用-解析函数-执行函数
bar函数执行完成后调用栈里面的函数执行上下文就会被回收,与此同时其对应的AO对象也会被回收,但是FOO对象、FOO函数对应的AO对象、bar对象都不会被回收,那是因为从GO出发有其指引。如果想其被垃圾回收机制回收可以:Foo = null; Fn = null;这样就会被回收。