返回

新闻详情

javaScript组合拳


来源:南宁兄弟连IT培训学校时间:2019/8/16 8:49:30

问 : 基本类型和引用类型的区别。

答 : 基本类型是存储在栈之中的值,引用类型是存储在堆中数据的地址。

问 : 可以举例说明一下JavaScript之中的引用类型有哪些么?

答 : Object , function , Array , Set , Map

当然了,面试JavaScript 肯定离不开原型链和作用域链,那么什么是作用域链那 ?这个其实是说来话长的一个话题,因为在这里给大家阐述下我个人的一些理解 :

函数在执行的过程之中会产生一个临时存储数据的对象, 这个对象我们称之为activeObject, 简称AO , 每个函数在执行时都会在栈里面存上这么一个东西,以便于储存期中的局部变量。但是js有全局变量的概念,也就是在局部中可以访问全局的数据,怎么访问那? 当然是由内自外的冒泡访问,但是如何由内自外,这个以包含关系决定访问顺序就是传说中的作用域链。

接着来说原型链, 这个是实例对象访问方法和共用数据的一个顺序,也是由内自外的。

接着会顺着继续向下问一些关于闭包,内存泄漏的问题。

闭包问题, 其实就是两个函数嵌套,产生了两个嵌套的活动对象,子活动对象存储了父级活动对象的属性,从而导致外部函数的局部变量被子活动对象保存的一种JavaScript特性。

用代码表示一下:

function outer(){

var freeVar = “hello”

}

这是一个外部函数会产生一个 AO , 这个AO是因为outer 函数执行而创建出来的,所以我们暂时命名为 AO(outer).

闭包自然少不了函数的嵌套 :

function outer(){

var freeVar = “hello”;

function inner(){

console.log(freeVar);

}

return inner;

}

但凡是在AO(outer)内部创建的函数引用了外部的变量那么妥了,闭包就产生了。

收起你的黑人问号脸,来看一下我的解释 :

Inner函数执行时当然也会产生AO ,那么这个AO我们取名叫做AO(inner), ok 在这个ao中我们干了些啥? 是不是引用了外部函数的变量 freeVar ?

对啊,肯定用了,但是你只是用了freeVar 这么简单么 ? no,no,no , 其实在内部函数之中我们引用的是 AO(outer).freeVar。

好了我们这个时候来看一下,AO是个啥 ? 是个对象啊, 既然是对象那这货是不是一个引用类型,引用类型存在于内存之中不? 存在,那么恭喜你,这个AO.freeVar 不会想普通的局部变量在函数结尾被删除了, 而是被保留在了内存之中。 这,就是闭包。

基本上这一套下来,你对JavaScript的理解,对JavaScript原理和机制的理解面试官也就了解的比较透彻了 , 接下来会考察一些知识的广度,当然这些问题都是比较简单随意也是比较容易得到答案的,所以在后面的部分我就只列举问题。


上一篇:CSS预编译器的再次理解

下一篇:布局和页面性能

  咨询老师  拨打电话  网上报名