JS面试题

index

JS面试题 __Glimmer

谈谈对前端安全的理解,有什么,怎么防范?

前端安全问题主要有XSS、CSRF攻击

XSS:跨站脚本攻击

它允许用户将恶意代码植入到提供给其他用户使用的页面中,可以简单的理解为一种javascript代码注入。

XSS的防御措施:

1.过滤转义输入输出

2.避免使用eval、new Function等执行字符串的方法,除非确定字符串和用户输入无关

3.使用cookie的httpOnly属性,加上了这个属性的cookie字段,js是无法进行读写的

4.使用innerHTML、document.write的时候,如果数据是用户输入的,那么需要对象关键字符进行过滤与转义

CSRF:跨站请求伪造

其实就是网站中的一些提交行为,被黑客利用,在你访问黑客的网站的时候进行操作,会被操作到其他网站上;

CSRF防御措施:

1.检测http referer是否是同域名

2.避免登录的session长时间存储在客户端中

3.关键请求使用验证码或者token机制

其他的一些攻击方法还有HTTP劫持、界面操作劫持

JS实现继承的几种方式

借用构造函数实现继承

function Parent1(){
   this.name = "parent1"
 } 
function Child1(){
   Parent1.call(this); 
   this.type = "child1";
 }

缺点:Child1无法继承Parent1的原型对象,并没有真正的实现继承(部分继承),

借用原型链实现继承

function Parent2(){
  this.name = "parent2"; 
  this.play = [1,2,3]; 
} 
function Child2(){
  this.type = "child2"; 
} 
 Child2.prototype = new Parent2();

缺点:原型对象的属性是共享的

组合式继承

function Parent3(){
   this.name = "parent3";
   this.play = [1,2,3];
 } 
function Child3(){ 
   Parent3.call(this); 
   this.type = "child3"; 
} 
Child3.prototype = Object.create(Parent3.prototype); 
Child3.prototype.constructor = Child3;

第四种方法,利用一个空对象作为中介;

第五种拷贝继承;

原型与闭包相关问题

原型是什么

原型就是一个普通的对象,每个对象都有一个原型(Object除外),原型能存储我们的方法,构造函数创建出来的实例对象能够引用原型中的方法。

查看原型

以前一般使用对象的proto属性,ES6推出后,推荐用Object.getPrototypeOf()方法来获取对象的原型

闭包是什么?

专业说法:当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。

还可以这么理解: 闭包就是一个具有封闭功能与包裹功能的结构,是为了实现具有私有访问空间的函数的,函数可以构成闭包,因为函数内部定义的数据函数外部无法访问,即函数具有封闭性;函数可以封装代码即具有包裹性,所以函数可以构成闭包。

创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量

闭包的特性

闭包有三个特性:

1.函数嵌套函数

2.函数内部可以引用外部的参数和变量

3.参数和变量不会被垃圾回收机制回收

闭包有什么用,使用场景

当我们需要在模块中定义一些变量,并希望这些变量一直保存在内存中但又不会“污染”全局的变量时,就可以用闭包来定义这个模块。

闭包的缺点

闭包的缺点就是常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

函数套函数就是闭包吗?

不是!当一个内部函数被其外部函数之外的变量引用时,才会形成了一个闭包 ;

闭包面试题

function fun(n,o) {
    console.log(o);
    return {
         fun:function(m){
            return fun(m,n);
         }
     };
}

var a = fun(0); a.fun(1); a.fun(2); a.fun(3);//undefined,0,0,0
var b = fun(0).fun(1).fun(2).fun(3);//undefined,0,1,2
var c = fun(0).fun(1); c.fun(2); c.fun(3);//undefined,0,1,1
//问:三行a,b,c的输出分别是什么?

深拷贝与浅拷贝

实现浅拷贝

var obj1={a:10,b:20,c:30};
var obj2=obj1;
obj2.b=100;
console.log(obj1);
//{a:10,b:100,c:30};<- b的值被修改
console.log(obj2);
//{a:10,b:100,c:30};

实现深拷贝

var obj1={a:10,b:20,c:30};
var obj2={a:obj1.a,b:obj1.b,c:obj1.c};
obj2.b=100;
console.log(obj1);
//{a:10,b:20,c:30};<- b的值没有被修改
console.log(obj2);
//{a:10,b:100,c:30};

深拷贝例题:

var arr=[1,2,[3,4,[5,6,[7,8]]],[9,10]];

var arr2=[];
function fn(a,b){
    for(var i=0;i<b.length;i++){
        if(typeof b[i]=="number"){
            a.push(b[i]);
        }else{
            var arr3=[];
            fn(arr3,b[i]);
            a.push(arr3);
        }
    }
}
fn(arr2,arr)
arr[2].push(5);
console.log(arr2)

代码优化基本方法

减少HTTP请求

HTML优化:

  • 使用语义化标签
  • 减少iframe:iframe是SEO的大忌,iframe有好处也有弊端
  • 避免重定向

CSS优化:

  • 布局代码写前面
  • 删除空样式
  • 不滥用浮动,字体,需要加载的网络字体根据网站需求再添加
  • 选择器性能优化
  • 避免使用表达式,避免用id写样式

js优化:

  • 压缩
  • 减少重复代码

图片优化:

  • 使用WebP
  • 图片合并,CSS sprite技术

减少DOM操作

  • 缓存已经访问过的元素
  • "离线"更新节点, 再将它们添加到树中
  • 避免使用 JavaScript 输出页面布局--应该是CSS的事儿

使用JSON格式来进行数据交换 使用CDN加速

使用HTTP缓存:添加 Expires 或 Cache-Control 信息头

使用DNS预解析

Chrome内置了DNS Prefetching技术, Firefox 3.5 也引入了这一特性,由于Chrome和Firefox 3.5本身对DNS预解析做了相应优化设置,所以设置DNS预解析的不良影响之一就是可能会降低Google Chrome浏览器及火狐Firefox 3.5浏览器的用户体验。

预解析的实现:

1.用meta信息来告知浏览器, 当前页面要做DNS预解析:

2.在页面header中使用link标签来强制对DNS预解析:

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

推荐阅读更多精彩内容