七、闭包问题php
闭包:函数能被外部调用到,则该做用连上的全部变量都会被保存下来。前端
做用:①能够读取函数内部的变量;②至关于划出了一块私有做用域,避免数据污染;③让变量始终保存在内存中vue
使用全局变量被认为是很差的习惯,并且容易形成错误而且维护成本较高,因此js能够采用闭包的方式读取函数的内部变量。可是若是大量使用闭包就会形成过多的变量始终保存在内存中,会形成内存泄漏。react
一个简单的闭包例子:ajax
function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999
九、模块化编程编程
①AMD(异步模块定义) requirejs浏览器
defined(id,deps,factory) require([dependency],function(){})
异步加载,浏览器不会失去响应安全
它指定的回调函数,只有前面的模块都加载完成后,才会运行,解决了依赖性问题服务器
②CMD(通用模块定义) seajscookie
模块定义方式和模块加载时机处理不一样
defined(id,deps,factory) function(require,exports,module) module.exports = ______;
③区别:AMD依赖前置,在定义模块的时候就要声明其依赖的模块;CMD就近依赖,只有在用到哪一个模块的时候再去require;
十一、少用float?
①使用float可能会形成兼容性问题,好比在ie6如下,float元素margin加倍问题;②使用float以后会影响左右元素,有可能形成错位问题(float以后都要clear)
解决:可用display、position转化
①无序连接(ul、li),设定li标签属性:display:inline
②div左右结构,好比在右侧要放一个more(更多)来显示更多信息的时候用到了float:right,能够用定位来作。给包裹more的div设定position:relative,而后more这个标签right:0便可。结构更为清晰一点。
1八、什么是MVVM框架?
MVVM是Model-View-ViewModel的简写。
MVVM 是 Web 前端一种很是流行的开发模式,利用 MVVM 可使咱们的代码更专一于处理业务逻辑而不是去关心 DOM 操做。目前著名的 MVVM 框架有 vue, avalon, angular 等,这些框架各有千秋,可是实现的思想大体上是相同的:数据绑定 + 视图刷新。跟MVC同样,主要目的是分离视图(View)和模型(Model)。View能够独立于Model变化和修改,一个ViewModel能够绑定到不一样的"View"上,当View变化的时候Model能够不变,当Model变化的时候View也能够不变。
在MVVM中,数据是核心,因为VIewModel与View之间的双向绑定,操做了ViewModel中的数据(固然只能是监控属性),就会同步到DOM,咱们透过DOM事件监控用户对DOM的改动,也会同步到ViewModel。
<div id="mobile-list"> <h1 v-text="title"></h1> <ul> <li v-for="item in brands"> <b v-text="item.name"></b> <span v-show="showRank">Rank: {{item.rank}}</span> </li> </ul> </div>
var element = document.querySelector('#mobile-list'); var vm = new MVVM(element, { 'title' : 'Mobile List', 'showRank': true, 'brands' : [ {'name': 'Apple', 'rank': 1}, {'name': 'Galaxy', 'rank': 2}, {'name': 'OPPO', 'rank': 3} ] }); vm.set('title', 'Top 3 Mobile Rank List'); // => <h1>Top 3 Mobile Rank List</h1>
以上这段如此简洁的代码,就是MVVM框架的一个简单的实现效果。在HTML代码里面,可能会嵌入不少自定义的属性(标记),以此来实现数据的绑定,并且还能够进行一些简单的逻辑处理,好比if和循环等。
react应该也算是MVVM框架,可是与传统的MVVN框架不一样的是,react默认数据绑定方式是单向绑定,而vue及angular都是双向绑定;react使用虚拟DOM配合JSX,而vue及angular直接将数据经过属性绑定在真实DOM上的。
MVVM框架的优势:
一、方便测试
在MVC下,Controller基本是没法测试的,里面混杂了个各类逻辑,并且分散在不一样的地方。有了MVVM咱们就能够测试里面的viewModel,来验证咱们的处理结果对不对。
二、便于代码的移植
能够把一些视图逻辑放在一个ViewModel里面,让不少view重用这段视图逻辑。好比iOS里面有iPhone版本和iPad版本,除了交互展现不同外,业务逻辑的model是一致的。这样,咱们就能够以很小的代价去开发另外一个app。
三、独立开发
开发人员能够专一于业务逻辑和数据的开发(ViewModel),设计人员能够专一于页面设计,使用Expression Blend能够很容易设计界面并生成xml代码。
20、使用原生js实现ajax
建立一个 XMLHttpRequest 对象。若是不支持建立该对象的浏览器,则须要建立 ActiveXObject,具体方法以下:
var xmlHttpRequest; function createXmlHttpRequest(){ if(window.XMLHttpRequest)//非IE xmlHttpRequest = new XMLHttpRequest(); else if(window.ActiveObject)//IE6+ xmlHttpRequest = new ActiveObject("Msxml2.XMLHTTP"); else//IE6- xmlHttpRequest = new ActiveObject("Microsoft.XMLHTTP"); }
提交请求的方法:
open(method,url);//分别为提交的方法(GET或者POST)和提交的url send(content); onreadystatechange(){ if(xmlHttpRequest.readyState == 4){ if(xmlHttpRequest.state == 200){ //请求成功 } }else{ //请求失败 } }
一、前端安全方面有没有了解?XSS和CSRF如何攻防?
XSS(Cross Site Scripting)是跨站脚本攻击,为了区分CSS,因此缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
在网页的一些公共区域(例如,建议提交表单或消息公共板的输入表单)输入一些文本,这些文本被其它用户看到,但这些文本不只仅是他们要输入的文本,同时还包括一些能够在客户端执行的脚本。如:
"/> <script>alert(document.cookie);</script><!--
在文本框中输入以上代码,而后点击提交,就会把用户的cookie弹出来。
XSS漏洞修复
1.将重要的cookies标记为HTTP ONLY。
2.只容许用户输入咱们指望的数据。如年龄框只能输入数字。
3.对数据进行HTTP Encode处理。
4.过滤或者移除特殊的HTML标签。
5.过滤JS事件的标签。
CSRF(Cross-site request forgery)是跨站请求伪造。XSS利用站点内的信任用户,而CSRF则经过假装来自受信任用户的请求来利用受信任的网站。其实就是攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF攻击的思想
用户浏览并登录信任网站A;经过验证,在用户处产生X的cookie;用户在没有登出X的时候,浏览危险网站B;B要求访问第三方网站A,发出一个请求;根据这个请求,浏览器使用刚才产生的cookie直接访问A。
一个简单的实例
银行网站A,它以GET请求来完成银行转帐的操做,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
危险网站B,它里面有一段HTML的代码以下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
首先,你登陆了银行网站A,而后访问危险网站B,噢,这时你会发现你的银行帐户少了1000块......
CSRF的防护
1.在表单里增长Hash值,以认证这确实是用户发送的请求,而后在服务器端进行Hash值验证。
2.验证码:每次的用户提交都须要用户在表单中填写一个图片上的随机字符串。
20、是否了解什么前沿的技术、或者你本身有什么技术特长、在哪方便有优点?