记录高级js学习(二)js底层与垃圾回收机制

26 阅读1分钟

function在声明之前为什么可以调用:

因为声明函数和声明变量的底层是不同的,函数是引用数据类型,在全局对象中存放的是一个地址,指向内存新开辟的一个空间,在预编译的时候,堆空间存放着这个函数的函数体以及其父级作用域,这样函数体已经存在于全局对象里了,调用的时候可以直接使用

image.png

垃圾回收机制的实现:GC算法

image.png

image.png

记录几个注意事项:

1.函数在声明的时候已经确定了他的父级作用域,不会受调用位置影响

2.js引擎会对下图语法做特殊处理,如果有var则是foo作用域内的变量,没有则是全局的,正常情况下这应该是一种语法错误,不应该存在的(打印100)

image.png

var a = b = 100 实际为 var a = 100; b=100 打印结果为a报错,b为100

image.png

3.全局对象中本身自带name属性了,修改后的值即使刷新页面也不会重置。所以使用的时候要小心