我算是菜鸟一枚,虽然说前端的东西我都有了解,但是基本都不熟悉,问个原理就懵。
偶然机会投递了千家房产,人资经理说给我个前端面试的机会。我可能真的太菜鸟了,基础的都没回答上来,不过面试一次长长经验,我还是很开心的。
下边是面试官问我的题目:
答案不全面,望理解。
-
1.定位的方式:
静态定位:static(默认情况),每个元素都处于常规文档流中。设置top bottom left right 属性不起作用。 绝对定位:absolute,相对于 相对定位:relative,相对的是它原来在文档流中的位置。元素原位置的空间 固定定位:fixed, 粘性定位:sticky,
-
2.作用域:
作用域就是变量和函数的可访问范围,控制着变量和函数的可见性与生命周期,在JS中变量的作用域有全局作用域和局部作用域;
-
3.闭包:
就是能够读取其他函数内部变量的函数。内部作用域可以访问外层作用层。 特性: 封闭性,外界无法访问闭包内部的数据,除非闭包主动向外界提供访问接口; 持久性,一般的函数,调用完毕后,系统自动注销函数,而对于闭包来说,在外部函数被调用之后,闭包结构依然保存在系统中,闭包中的数据依然存在,从而实现对数据的持久使用。
-
4.object(对象)的声明方式
字面量声明: `var obj={ 属性名称:属性值; 方法名称:function (){ 函数体 } }` 利用new Object : `var obj=new Object; obj.属性名=属性值; obj.方法名=function () { 函数体 }` 构造函数声明对象: `function text([参数列表]){ this.属性名=属性值; this.方法名=function(){ 函数体 } }` 原型模式声明: `function text(name,age){ text.prototype.属性名=属性值; text.prototype.方法名=function(){ 函数体 } } var obj=new text(‘lishi’,20);` 工厂方式声明对象 `function text(name,age){ var obj=new Object(); obj.name=name; obj,age=age; obj.run=function(){ return this.name+this.age; } } var obj=text('lihua',21)` 混合模式声明: `function text(name,age){ this.name=name; thia,age=age; } text.prototype.属性名=属性值; text.prototype.方法名=function(){ 函数体 } var obj=new text('lihua',30)`
-
5.js的对象
JS中所有的事物都是对象:字符串,数值等。 js中的内置对象,原生对象,宿主对象。 原生对象(本地对象,要new):简单来说就是ECMA-262定义的类。 内置对象(不用new,直接调用):由ECMAScript提供实现的,独立于宿主环境的所有对象,在ECMAScript程序开始执行时出现。(已经实例化好的,math,global) 宿主对象:由ECMAScript实现的宿主环境提供的对象。(浏览器提供的对象)
-
6.实现异步的原理
同步(sync):上一个任务执行完,在执行下一个任务,程序的执行顺序和任务的排列顺序是一致的。 异步(asyc):前一个任务执行完后,不执行下一个任务,而是执行回调函数,后一个任务不等前一个任务结束就执行,程序执行顺序和任务排列顺序是不一致的,异步的。(setTimeout和setInterval函数)
-
7.浏览器渲染页面的过程
从耗时的角度,浏览器请求,加载,渲染一个页面,时间花在下面五件事上。 DNS查询 TCP连接 HTTP请求及响应 服务器响应 客户端渲染(可分为5部分) 处理HTML标记并构建DOM树。 处理CSS标记并构建CSS规则树。 将DOM树与CSS规则树合并成一个渲染树。 根据渲染树来布局,以计算每个节点的几何信息。 将各个节点绘制到屏幕上
-
8.原型链原理
任何一个实例,通过原型链,找到它上面的原型,该原型对象中的方法和属性,可以被所有的原型实例共享。 Object是原型链的顶端。原型可以起到继承的作用。原型的方法都可以被不同的实例共享
-
9.es6的新增方法
数组: forEach():array.forEach(function(currentValue,index,arr)),迭代 map():同上 filter():同上,将满足条件的返回到新数组。 some():同上,检测是否满足条件,返回值为布尔值,若第一个满足就不会继续查找 every():同上。 字符串: trim(),从一个字符串的两端删除空白字符,返回新字符串。 对象方法: Object.keys(),用于获取对象自身的属性 Object.defineProperty(obj(目标对象),prop(需定义属性名),descriptor(目标属性拥有的特性{ `value:设置属性值,默认underfined writable:值是否可以重写,默认false enumerable:是否枚举,默认false configurable:是否可以被删除/再次修改,默认false` }))
-
10.let和const和var
全局申明的var变量会挂载在window上,而let和const不会 var声明变量存在变量提升,let和const不会 let,const的作用域范围是块级作用域,var是函数作用域。 同一作用域下let和const不能声明同名变量,而var可以。 同一作用域下在let和const声明前使用变量会存在暂时性死区 const 一旦声明必须赋值,不能使用null占位。 声明后不能再修改。 如果声明的是复合类型数据,可以修改其属性。
-
11.面向对象三大特性
封装性:将重复使用的代码,单独封装成一个功能 继承性:子类继承父类的实例属性和实例方法,不会继承静态属性和静态方法,且静态属性只能通过类名调用。 多态性:具体表现为方法的重载和方法重写 重载:不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数 重写:函数名和参数一样,函数体不同