撩课-Web大前端每天5道面试题-Day1

1. var的变量提升的底层原理是什么?

JS引擎的工作方式是:
1) 先解析代码,获取所有被声明的变量;
2) 然后在运行。也就是说分为预处理和执行两个阶段。
补充:
变量提升:所有变量的声明语句都会被提升到代码头部。
但是变量提升只对var命令声明的变量有效,如果一个变量不是
用var命令声明的,就不会发生变量提升。
js里的function也可看做变量,也存在变量提升情况。

2. JS如何计算浏览器的渲染时间?

浏览器的渲染过程主要包括以下几步:
1) 解析HTML生成DOM树。
2) 解析CSS生成CSSOM规则树。
3) 将DOM树与CSSOM规则树合并在一起生成渲染树。
4) 遍历渲染树开始布局,计算每个节点的位置大小信息。
5) 将渲染树每个节点绘制到屏幕。

优化考虑:
CSS 优先:引入顺序上,CSS 资源先于 JavaScript 资源。
JS置后:通常把JS代码放到页面底部,且JavaScript 应尽量少影响 DOM 的构建。

3. JS的回收机制?

垃圾回收机制就是间歇的不定期的寻找到不再使用的变量,
并释放掉它们所指向的内存; 主要为了以防内存泄漏,
(内存泄漏: 当已经不需要某块内存时这块内存还存在着), 

JS有两种变量: 全局变量和在函数中产生的局部变量。
局部变量的生命周期在函数执行过后就结束了,
此时便可将它引用的内存释放(即垃圾回收); 
但全局变量生命周期会持续到浏览器关闭页面。

JS执行环境中的垃圾回收器有两种方式:
标记清除(mark and sweep)、
引用计数(reference counting)。

标记清除:  垃圾收集器给内存中的所有变量都加上标记,
然后去掉环境中的变量以及被环境中的变量引用的变量的标记。
在此之后再被加上的标记的变量即为需要回收的变量,
因为环境中的变量已经无法访问到这些变量。

引用计数(reference counting):  这种方式常常会引起内存泄漏,
低版本的IE使用这种方式。机制就是跟踪一个值的引用次数,
当声明一个变量并将一个引用类型赋值给该变量时该值引用次数加1,
当这个变量指向其他一个时该值的引用次数便减一。
当该值引用次数为0时就会被回收。

4. 垂直水平居中的方式?

/**
方式一:  定位
父元素设置为:position: relative; 
子元素设置为:position: absolute; 
距上50%,据左50%,然后减去元素自身宽度的距离就可以实现 
*/
width: 100px;
height: 100px;
position: absolute;
left: 50%;
top: 50%;
margin: -50px 0 0 -50px;

/** 方式二:  flex布局 */
display: flex;  //flex布局
justify-content: center; // 使子项目水平居中
align-items: center; // 使子项目垂直居中

/** 方式三:  table-cell  (不推荐) */
display: table-cell;
vertical-align: middle;//使子元素垂直居中
text-align: center;//使子元素水平居中

5. 实现一个三栏布局,中间版块自适应方法有哪些?

// 方式一: 浮动和定位
<div class="content">
   <div class="left">left</div>
   <div class="right">right</div>
   <div class="center">center</div>
</div>

.left{
    float: left;
    width: 100px;
    height: 200px; 
}
.right{
    float: right;
    padding: 0;
    width: 100px;
    height: 200px;
}
.center{
    margin: 0 100px 0 200px;
}

方式二:  将父容器的position设置为relative,两个边栏的position设置成absolute。

6. 如何判断一个对象是否为数组?

1) isPrototypeOf()方法,判定Array是不是在obj的原型链中,如果是,则返回true,否则false;
2) obj  instanceof  Array;
3) Object.prototype.toString.call(obj);
4) Array.isArray(obj);  // 不推荐 

7. margin坍塌?

当两个盒子在垂直方向上设置margin值时,会出现塌陷现象。

解决方案主要包括:
1. 给父盒子添加border;
2. 给父盒子添加padding-top;
3. 给父盒子添加overflow:hidden;
4. 父盒子:position:fixed;
5. 父盒子:display:table;
6. 给子元素的前面添加一个兄弟元素
   属性为:content:"";
   overflow:hidden;

8. 说说BFC原理?

BFC就是页面上的一个隔离的独立容器,
容器里面的子元素不会影响到外面的元素。

因为BFC内部的元素和外部的元素绝对不会互相影响,
因此,当BFC外部存在浮动时,
它不会影响BFC内部Box的布局,
BFC会通过变窄,而不与浮动有重叠。

同样的,当BFC内部有浮动时,
为了不影响外部元素的布局,
BFC计算高度时会包括浮动的高度。
避免margin重叠也是这样的一个道理。

9. 写一下节点增删改?

 //  注意:动态创建元素不会直接显示在页面当中,
    前面必须是document,不能是其他
(1)document.createElement(标签名); 

 // 在指定父级子节点最后一个后面追加子元素
(2)父级.appendChild(要追加的元素) ;   

 // 在父级的指定子元素前面插入一个新元素
   (注意:先判断如果第二个参数的节点是否存在)
(3)父级.insertBefore(新的元素,指定的已有子元素); 

 // 深克隆(负值标签、标签属性、标签里面内容); 
   浅克隆(负值标签、标签属性不复制标签里面内容)
(4)元素.cloneNode(true) 或者元素.cloneNode(false);

(5)父级.removeChild(已有子元素);

(6)父级.replaceChild(新的元素节点,原有元素节点);

10. 如何获取元素的父节点和兄弟节点,写一下?

 // 获取父节点:

// 1. parentNode获取父节点
// 获取的是当前元素的直接父元素。
var p = document.getElementById("test").parentNode;

// 2. parentElement获取父节点
// parentElement和parentNode一样,只是parentElement是ie的标准。
var p1 = document.getElementById("test").parentElement;

// 3. offsetParent获取所有父节点
var p2 = document.getElementById("test").offsetParent;

获取兄弟节点:

// 1. 通过获取父亲节点再获取子节点来获取兄弟节点
var brother1 = document.getElementById("test").parentNode.children[1];

// 2. 获取上一个兄弟节点
// 在获取前一个兄弟节点的时候可以使用previousSibling
// 和previousElementSibling。
// 他们的区别是previousSibling会匹配字符,
// 包括换行和空格,而不是节点。
// previousElementSibling则直接匹配节点。
var brother2 = document.getElementById("test").previousElementSibling;
var brother3 = document.getElementById("test").previousSibling;

// 3. 获取下一个兄弟节点
var brother4 = document.getElementById("test").nextElementSibling;
var brother5 = document.getElementById("test").nextSibling;

11. 给你一个乱序数组,你怎么排序?

撩课小编:  sort, 冒泡, 选择, 二分法....
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容