前端开发四

七、闭包问题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、是否了解什么前沿的技术、或者你本身有什么技术特长、在哪方便有优点?

相关文章
相关标签/搜索