贵州网站中企动力建设磁力最好用的搜索引擎
2026/1/17 0:41:03 网站建设 项目流程
贵州网站中企动力建设,磁力最好用的搜索引擎,小游戏不用实名认证的游戏,申请域名后怎样做网站全局代码执行过程-函数 var name kaimofoo(123) function foo(num) {console.log(m)var m 10var n 20console.log(foo) }全局代码执行过程-函数嵌套 当我们查找一个变量时#xff0c;真实的查找路径是沿着作用域链来查找 var name kaimofoo(12…全局代码执行过程-函数varnamekaimofoo(123)functionfoo(num){console.log(m)varm10varn20console.log(foo)}全局代码执行过程-函数嵌套当我们查找一个变量时真实的查找路径是沿着作用域链来查找varnamekaimofoo(123)functionfoo(num){console.log(m)varm10varn20console.log(foo)functionbar(){console.log(bar)}bar()}函数调用函数执行过程varmsgkaimofunctionfoo(){console.log(msg)}functionbar(){varmsgkaimo313foo()}bar()变量环境和变量记录其实我们上面讲解的AO/GO/VO都是基于早期 ECMA 的版本(ECMAScript 5以前)规范Every execution context has associated with it a variable object, Variables and functions declared in the source text are added as properties of the variable object, For function code, parameters are added as properties of the variable object.每一个执行上下文会被关联到一个变量对象variable object VO在源代码中的变量和函数声明会被作为属性添加到 VO 中对于函数来说参数也会被添加到 VO 中。在最新的 ECMA 的版本规范中对于一些词汇进行了修改Every execution context has an associated VariableEnvironment, Variables and functions declared in ECMAScript code evaluated in an execution context are added as bindings in that VariableEnvironment’s Environment Record, For function code, parameters are also added as bindings to that Environment Record.每一个执行上下文会被关联到一个变量环境VariableEnvironmentVE中在执行代码中变量和函数的声明会作为环境记录Environment RecordER添加到变量环境中对于函数来说参数也会被作为环境记录添加到变量环境中。通过上面的变化我们可以知道在最新的 ECMA 标准中我们前面的变量对象 VO 已经有了另外一个称呼了变量环境 VE。作用域提升面试题面试题一varn100functionfoo(){n200}foo()console.log(n)面试题二functionfoo(){console.log(n)varn200console.log(n)}varn100foo()面试题三varn100functionfoo1(){console.log(n)}functionfoo2(){varn200console.log(n)foo1()}foo2()console.log(n)面试题四vara100functionfoo(){console.log(a)returnvara100}foo()面试题五functionfoo(){varab100}foo()console.log(b)console.log(a)这里的varab100// 转成下面两行代码vara100b100// 没有 var这个时候 JS 引擎会特殊处理这种将 b 加到 GO认识内存管理不管什么样的编程语言在代码的执行过程中都是需要给它分配内存的不同的是某些编程语言需要我们自己手动的管理内存某些编程语言可以自动帮助我们管理内存。不管以什么样的方式来管理内存内存的管理都会有如下的生命周期第一步分配申请你需要的内存申请第二步使用分配的内存存放一些东西比如对象等第三步不需要使用时对其进行释放不同的编程语言对于第一步和第三步有不同的实现手动管理内存比如 C、C包括早期的 OC都是需要手动来管理内存的申请和释放的malloc 和 free 函数自动管理内存比如 Java、JavaScript、Python、Swift、Dart 等它们有自动帮助我们管理内存我们可以知道 JavaScript 通常情况下是不需要手动来管理的。JS 的内存管理JavaScript 会在定义变量时为我们分配内存。内存分配方式JS 对于基本数据类型内存的分配会在执行时直接在栈空间进行分配JS 对于复杂数据类型内存的分配会在堆内存中开辟一块空间并且将这块空间的指针返回值给变量引用JS 的垃圾回收因为内存的大小是有限的所以当内存不再需要的时候我们需要对其进行释放以便腾出更多的内存空间。在手动管理内存的语言中我们需要通过一些方式自己来释放不再需要的内存比如 free 函数但是这种管理的方式其实非常的低效影响我们编写逻辑的代码效率并且这种方式对开发者的要求也很高并且一不小心就会产生内存泄漏所以大部分现代的编程语言都是有自己的垃圾回收机制垃圾回收Garbage Collection简称 GC对于那些不再使用的对象我们都称之为是垃圾它需要被回收以释放更多的内存空间而我们的语言运行环境比如 Java 的运行环境 JVMJavaScript 的运行环境 js 引擎都会有垃圾回收器垃圾回收器我们也会简称为 GC所以在很多地方你看到 GC 其实指的是垃圾回收器GC 怎么知道那些对象是不再使用的呢这里就要用到 GC 算法了。常见的 GC 算法-引用计数当一个对象有一个引用指向它时那么这个对象的引用就 1, 当一个独享的引用为 0 时这个对象就可以被销毁掉varp{name:kaimo}varp1{name:kaimo1,friend:p}varp2{name:kaimo2,friend:p}引用计数存在一个很大的弊端循环引用varobj1{friend:obj2}varobj2{friend:obj1}这样相互引用会导致内存泄漏常见的 GC 算法-标记清除标记清除这个算法是设置一个根对象root object垃圾回收器会定期从这个根开始找所有从根开始有引用到的对象对于哪些没有引用到的对象就认为是不可用的对象这个算法可以很好的解决循环引用的问题JS 引擎比较广泛采用的就是标记清除算法当然类似于 V8 引擎为了进行更好的优化它在算法的实现细节上也会结合一些其他的算法。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询