阿里面经——前端电话面试

1、prototype原型链

原型prototype简介

原型是函数的一个属性,也是一个对象

在这里插入图片描述在这里插入图片描述
可通过prototype创建对象,创建的对象共享原型的所有属性

原型对象、实例、构造函数constructor之间的四种关系

构造函数通过new方法可创建实例
在这里插入图片描述

每个构造函数都具有一个原型对象
在这里插入图片描述

原型对象都包含一个指向构造函数的指针

实例具有一个指向原型对象的内部指针
在这里插入图片描述

原型创建对象的缺点:共享
当共享的属性有数组时,创建的某个对象修改了数组,所有对象的数组都会被修改

较好的创建对象的方法
在这里插入图片描述
使用构造函数保证属性的私有化。并不被污染,结合原型共享方法。

原型链

在这里插入图片描述
举例子: 程序寻找方法和属性的时候先在当前实例中寻找,找不到再到实例的原型找,实例的原型指向父类的实例,找不到再到父类的原型找——即父类的父类的实例。

因此,原型链就是以原型为中介联系起父类和子类,子类的实例指向子类的原型,子类的原型指向父类的实例,实现继承的功能

参考内容

2、闭包:注意事项

闭包是指有权访问另一个函数作用域中的变量的函数

作用:

  1. 实现公有变量(函数累加器)
  2. 可以做缓存
  3. 实现封装,属性私有化
  4. 模块化开发,防止污染全局变量

注意事项:

  1. 内存泄漏内存溢出
    ——内存泄漏:占用的内存没有及时释放。内存泄露积累多了就容易导致内存溢出。
    函数执行完后,函数内的局部变量没有释放,占用内存时间会变长,容易造成内存泄露。

  2. 关于闭包中的this对象。
    this对象指向的是什么,要看函数所运行的环境,如果函数在全局范围内运行,指向的对象就是window对象。
    参考内容

  3. 闭包允许内层函数引用父函数中的变量,但是该变量是最终值。
    在这里插入图片描述
    参考内容

3、call和apply的区别
都是两个参数,功能是调用函数
第一个参数作用是设置环境
第二个参数:
call:可以加入多个参数
apply:参数只能以数组形式加入
== bind ==
bind为函数绑定环境

4、盒子在标准浏览器和IE浏览器的区别

两者的区别在于content的不同,IE盒模型的content包括border、padding

5、undefined和null的区别

undefined:

在javascript中,undefined是一个没有设置值的变量
typeof是一个没有值的变量,会返回undefined

null:

在JavaScript中,null表示“什么都没有”。
null是一个只有一个值的特殊类型,表示一个空对象

undefined和null的区别:

  • undefined 表示一个变量没有被声明,或者被声明没有被赋值(未初始化),如果一个函数什么都不返回,则该函数默认返回undefinednull 则表示空值
  • undefined 不是一个有效的JSON,而 null 是;
  • nullundefined 的值相等,但类型不等:undefined的类型(typeof)是 undefined ;null的类型(typeof)是 object
  • null执行算术转换时,则值为0;undefined 不执行任何此类转换,进行算数计算时,结果为NAN
发布了4 篇原创文章 · 获赞 0 · 访问量 36

猜你喜欢

转载自blog.csdn.net/weixin_43800124/article/details/105388344