今天的码农女孩做了关于js的简答题

1.什么是闭包?有什么特点?

闭包是能够有权访问其他函数内部的私有变量的函数

是指有权访问另一个函数的作用域中的变量的函数,可以提升变量

优点:在页面加载时在内存中存在,调用速度快,并闭包的变量也会始终保存在内存中

缺点:造成内存消耗过大,页面性能降低,需要手动清空才能释放内存

闭包的表现形式:函数的嵌套,递归,匿名函数等。

特点:访问私有变量,变量不被销毁,用于封装

2.new关键字都做了什么

(1)创建一个新对象

(2)将构造器的作用域赋给新对象

(3)用this关键字指向这个对象

(4)通过proto寻找父类对象

(5)返回新对象给调用者

3.js的数据类型有哪些

基本类型:数字(number),字符串(string),布尔(boolean),空(null undefined)

引用类型:对象/引用(object)

4.0.1+0.2为什么不等于0.3

丢失精度问题

在小数执行运算时,也需要转化成二进制数,被转化的0.1和0.2为32位循环二进制

在做运算则返回的也是循环32位的0.3,就丢失了精度

5.深拷贝和浅拷贝的区别

深拷贝:两个变量复制,引用的是不同的堆内存机制

浅拷贝:两个变量复制,引用的是一个堆内存机制

深拷贝和浅拷贝的使用场景是在复杂对象里,即对象的属性还是对象,

浅拷贝是指只复制一层对象,当对象的属性是引用类型时,实质复制的是其引用,当引用指向的值改变时也会跟着变化

浅拷贝的方法

// 只复制第一层的浅拷贝

function simpleCopy(obj1) {

   var obj2 = Array.isArray(obj1) ? [] : {};

   for (let i in obj1) {

   obj2[i] = obj1[i];

  }

   return obj2;

}

var obj1 = {

   a: 1,

   b: 2,

   c: {

         d: 3

      }

}

var obj2 = simpleCopy(obj1);

obj2.a = 3;

obj2.c.d = 4;

深拷贝的方法

function deepClone(obj){

    let objClone = Array.isArray(obj)?[]:{};

    if(obj && typeof obj==="object"){

        for(key in obj){

            if(obj.hasOwnProperty(key)){

                //判断ojb子元素是否为对象,如果是,递归复制

                if(obj[key]&&typeof obj[key] ==="object"){

                    objClone[key] = deepClone(obj[key]);

                }else{

                    //如果不是,简单复制

                    objClone[key] = obj[key];

                }

            }

        }

    }

    return objClone;

}    

let a=[1,2,3,4],

    b=deepClone(a);

a[0]=2;

console.log(a,b);

6.谈谈你理解的this关键字

全局下this指向window

对象操作下,点前面是谁,this就指向谁,没有指向window

匿名函数指向window

Dom元素绑定事件,指向当前dom对象

7.什么是变量提升

   变量提升也叫域解释,在js代码没有执行之前,在内存中,var会先声明,而function声明和定义都完成了

8.js内存回收机制是什么

 引用计数:每次变量被引用则数值加1,赋值给其他变量,或不引用数值-1,则到0为止进行回收

 标记清除:当变量被引用,则标注进入环境,变量不使用标注离开环境,js回收机制,检测到离开环境就回收

9.什么情况下js内存不会回收呢?

   全局变量不会回收

闭包引用的变量不会回收

有栈内存引用堆内存的地址不被回收

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值