JS进阶0301

循环引用 循环引用会造成无法进行垃圾回收 function f() { var o1 = {}; var o2 = {}; o1.P = O2; // O1 引用 o2 o2.p = o1; // o2 引用 o1. 这就造成循环引用 } f(); 标记-清除算法 通过根变量是否可达,来判断是否为激活状态 解决了循环引用无法回收的问题,通过判断根变量是否可达来决定是否

- 阅读全文 -

for循环我不知道的事情

for循环中,定义的东西,居然是赋值到了所出的作用域内for( var i=0 ; i<1 ; i++ ){ var a=0; } console.log(i) // 1 console.log(a) // 0 /* *不会报错,而是可以直接输出 */知道和理解完全是两回事,知道是我知道ES6之前,只有全局作用域和函数作用域,而我一直没有去理解它现在终于明白了,理解了,知道为什么ES

- 阅读全文 -

严格模式

有时候,相同的代码,严格模式可以比非严格模式下运行的更快。严格模式下修复了JavaScript引擎难以执行的缺陷严格模式下不能再意外的创建全局变量 所以这样子的情况将会报错 "use strict"; a=1; //ReferenceError: a is not defined严格模式下,一些在非严格模式下的[错误而不报错的错误操作]将会抛出错误 "use strict"; NaN

- 阅读全文 -

JS实现深拷贝

//深拷贝的实现方法,不支持函数 let arr=[0,1,2,{a:"a",b:"b",c:"c"}]; let arr2=clone(arr); function clone(obj){ let objType=checkType(obj); let temp; if( objType==="Array" ){ temp=[]; }else if( objType=

- 阅读全文 -

错题深究与分析

题目:在浏览器控制台执行以下代码,输入的结果是()答案:4400 4401 4399 4400分析:这道题做错并且一直无法正确分析,主要是思想有些固化,脑子转不过弯来。恍然大悟之后可谓简单至极。解题的关键在于return { n : n , add : add } ,只要把键名n假设为其他键名,比如a,可以减少干扰。n属性的值与add函数内的n是没有任何关系的,由于add函数调用了外部函数的变量,

- 阅读全文 -

js诡辩

{}+[] // 0[]+{} // [object Object]代码1的为0的原因是,解释器把开头检测到的{}当做了代码块出来,然后实际运行的是+[]。这种运行结果只在特定的情况下产生,运算时添加一个括号就是代码2的结果({}+[]) // [object Object] ({}+[]).length // 15

- 阅读全文 -