一 、请说出下列最终执行结果,并解释为什么
var a = [];
for (var i=0;i<10;i++){
a[i] = function(){
console.log(i);
}
}
a[6]()
答: 执行结果为10, 应为var 循环 每个 i 都是全局的 所以循环停止i为10 所以打印i为10。然而如果使用了let/const则会在当前代码块中产生一个块级上下文,这个i则是每次循环的私有变量
var tmp = 123;
if(true){
console.log(tmp)
let tmp;
}
答: 会报错,因为if(){} 创建了一个作用域 这个作用域中用 let 定义了const变量 则不能在let定义之前访问 因为 let const 定义变量在定义之前都是暂时性锁区,即不能在定义之前访问
var arr = [12,34,32,89,4];
const getArrayMinNumber = arg => Math.min(...arg)
getArrayMinNumber(arr);
var a = 0;
let b = 0;
const c = 0;
const b = 1;
b = 2;//报错
const a; //报错 声明必须赋值
var a = 1;
var a = 2;
var b;
console.log(b)//undefined
let a = 1;
if(true){
//console.log(a);//报错
let a =3;
console.log(a)//3
};
console.log(a);//1
var a = 10;
var obj = {
a: 20,
fn(){
setTimeout(()=>{
console.log(this.a);
})
}
}
obj.fn();
答: 20,箭头函数不改变this指向 ,所以this为obj this.a = obj.a == 20 , 如果不是箭头函数如果浏览器直接执行 那么就是 10 this为window 所以window.a => 10
symbol
类型的用途答:
答: 简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝。浅拷贝拷贝引用,深拷贝拷贝值
答:
答:
答:
核心思想: 设置引用数,判断当前引用数是否为0
引用计数器
引用关系发生改变时修改引用数字
//循环引用的对象演示
function fn(){
const obj1 = {};
const obj2 = {};
obj1.name = obj2;
obj2.name = obj1;
return 'obj1和obj2互相引用,如果不存在其他对象对它们的引用,obj1与obj2的引用 计数也仍然为1 互相引用的对象就是循环引用 不会被引用计数算法回收'
}
答:
答:
答: 使用时机:会穿插在程序的运行中执行。
工作原理: 对象存在直接可达和间接可达,将遍历对象标记,拆分成多个小步骤,先标记直接可达对象。间接可达的标记与程序执行交替执行,最终完成清除。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。