前端面试复习中的总结

1.JS中数据类型的存储

date:2019.12.21

JavaScript中将数据类型分为基本数据类型和引用数据类型,它们其中有一个区别就是存储的位置不同。

JavaScript中的基本数据类型有:
String
Number
Boolean
Undefined
Null
Symbol(暂时不管)
基本数据类型都是一些简单的数据段,它们是存储在栈内存中。

JavaScript中的引用数据类型有:
Array
Object
引用数据类型是保存在堆内存中的,然后再栈内存中保存一个对堆内存中实际对象的引用。所以,JavaScript中对引用数据类型的操作都是操作对象的引用而不是实际的对象。

可以理解为,栈内存中保存了一个地址,这个地址和堆内存中的实际值是相关的。

2.export 和 export default 的区别

date:2020.09.05

总结一句话,export default是默认输入,只能有一次,在import导入时不需要指定导入哪一个,不用加大括号,只能唯一对应export default命令。而export则是导出多个,按照导入一个个对象,import在按需导入一个个对象。

3.原型链

date:2020.09.16
//基于原型链的面向对象
var a = {
    x: 10,
    calculate: function(z) {
        return this.x + this.y + z
    }
}

var b = {
    y: 30,
    __proto__: a //自己理解类似于Java继承
}

var c = {
    y: 50,
    __proto__: a
}

console.log(b.calculate(100));
console.log(c.calculate(200));
function Foo(y) {
    this.y = y
}

Foo.prototype.x = 100
Foo.prototype.calculate = function(z) {
    return this.x + this.y + z
}

var a = new Foo(10)
var b = new Foo(20)

console.log(a.calculate(50));
console.log(b.calculate(80));


console.log(b.__proto__ == Foo.prototype);
console.log(b.constructor == Foo);

简短总结:

proto 主要是安放在一个实际的对象中的,一个原型链接,寻找属性和方法
prototype 用来创建一个对象时构建__proto__用的

4.继承

date:2020.09.16
  • 继承属性和方法,但数据写死
    原型链接实现继承
function Person() {
    this.name = "zhansan"
}

Person.prototype.getName = function() {
    console.log(this.name);
}

function Student() {
    this.subject = "java"
}

Student.prototype = new Person();  //实现继承
Student.prototype.constructor = Student; 

new Student().getName();  //继承方法
console.log(new Student().name);  //继承属性


console.log(new Student().__proto__===Student.prototype);  //true
console.log(new Student().__proto__.constructor === Student);  //true
  • 继承属性,没有继承方法
    包含知识点: call绑定this 用来继承父构造函数,父的this指向子
function Person(name) {
    this.name = name
}

Person.prototype.getName = function() {
    console.log(this.name);
}

function Student(name, subject) {
	console.log(this);
    Person.call(this, name)  //this指向即将要创建出来的对象,父this指向子,
    this.subject = subject
}

var obj1 = new Student("zhangsan", "java")
console.log(obj1.name);  //可以继承属性,但不能继承方法
  • 实现继承属性和方法
function Person(name) {
    this.name = name
}

Person.prototype.getName = function() {
    console.log(this.name);
}

function Student(name, subject) {
	console.log(this);
    Person.call(this, name)  //this指向即将要创建出来的对象,父this指向子,
    this.subject = subject
}

Student.prototype=new Person()  //实现继承
Student.prototype.constructor=Student

var obj1=new Student("zhangsan", "java")
console.log(obj1.name);
obj1.getName()  //继承方法

5.闭包

date:2020.09.16

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

function base() {
    var x = 100

    return {
        getX: function() {
            return x  //可以访问外部变量
        }
    }
}

var obj = base()
console.log(obj.getX());
var arr = []
for (var i = 0; i < 10; i++) {
    arr[i] = function() {
        console.log(i);
    }
}
arr[6]() //调用方法for循环已经执行完了

var arr1 = []
for (var i = 0; i < 10; i++) {
    arr1[i] = (function(item) {
        return function() {
            console.log(item);
        }
    })(i)
}
arr1[6]() //通过闭包修改函数
function module() {
    var name = "zhangsan"
    var age = 19

    function person() {
        console.log("姓名:" + name + ",年龄:"+age);
    }

    return {
        person: person
    }
}

var module = module()
console.log(module.name); //undefined  私有变量获取不到 
module.person()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值