1.写一个深度克隆方法(es5)?

/**
*  深拷贝
* @param {object}fromObj 拷贝的对象
* @param {object}toObj  目标对象
*/ function deepCopyObj2NewObj(fromObj, toObj) {  
for(var key in fromObj){      
// 1. 取出键值对    
   var fromValue = fromObj[key];      
// 2. 检查当前的属性值是什么类型
   if(!isObj(fromValue)){
// 如果是值类型,那么就直接拷贝赋值
   toObj[key] = fromValue;
}else {        
 
// 如果是引用类型,
// 那么就再调用一次这个方法,
// 去内部拷贝这个对象的所有属性 var tempObj = new fromValue.constructor;
console.log(fromValue.constructor);
   deepCopyObj2NewObj(fromValue, tempObj);
   toObj[key] = tempObj;
      }
  }
} /**
* 辅助函数, 判断是否是对象
* @param {object}obj
* @returns {boolean}
*/ function isObj(obj) {  
  return obj instanceof Object;
}

2. es6中let,const,var的区别是什么?

var :声明全局变量;
let :声明块级变量,即局部变量, 定义后可以修改;
const :用于声明常量,就是定义后
不能再修改值或者引用值的常量,
也具有块级作用域

3. 对数组[1,2,3,8,2,8]进行去重,es5或者es6方法?

es四种方式:
Array.prototype.unique1 = function() {    
// 1. 定义数组
   var temp = [];    
// 2. 遍历当前数组
   for(var i = 0; i < this.length; i++) {        
// 3.如果当前数组的第i已经保存进了临时数组,
// 那么跳过,否则把当前项push到临时数组里面
   if (-1 === temp.indexOf(this[i])) {
       temp.push(this[i]);
       }
   }    
       return temp;
}; Array.prototype.unique2 = function() {    
//1. hash为hash表,r为临时数组
var hash = {}, temp=[];  
 
// 2.遍历当前数组
for(var i = 0; i < this.length; i++)
{        
// 3. 如果hash表中没有当前项 
if (!hash[this[i]])
{          
// 4.存入hash表
 hash[this[i]] = true;            
// 5.把当前数组的当前项
// push到临时数组里面
temp.push(this[i]);
   }
}    
return temp;
}; Array.prototype.unique3 = function() {    
var n = [this[0]];    
for(var i = 1; i < this.length; i++){        
if (this.indexOf(this[i]) === i) {
   n.push(this[i]);
      }
  }    
   return n;
}; Array.prototype.unique4 = function() {    
this.sort();    
var re=[this[0]];    
for(var i = 1; i < this.length; i++)
 {        
if( this[i] !== re[re.length-1])
 {
     re.push(this[i]);
 }
}    
     return re;
}; es6:Array.prototype.unique=Array.prototype.unique || function () {    
return [...new Set(this)];
};

4. 说说对es6中=>的理解?

箭头函数相当于匿名函数,
并且简化了函数定义,
箭头左边是参数,
右边是返回值。 箭头函数看上去
是匿名函数的一种简写,
但实际上,箭头函数和
匿名函数有个明显的区别: 箭头函数内部的this是词法作用域,
由上下文确定。

5. 点击一个按钮,发出ajax请求,如何防止用户在此请求方式返回之前再次点击?

// 点击提交按钮的时候,
// 把这个提交这个处理函数给解绑掉,
// 请求完成的时候在绑定回来 function clickHandler(){
 $(this).unbind('click', clickHandler);
   $.ajax({        
       url : 'url',        
       dataType : 'json',        
       type : 'post',        
       success : function (data) {            
       if (data.success) {                
       //提交成功做跳转处理
       } else {                
       //处理失败,重新绑定点击事件
        $(self).click(clickHandler);
         }
     }
 }
);}
$('#itlike').click(clickHandler); // 可以点击后让按钮不可用,
// 如果提交失败可以再次设置为可用
// 1.让按钮不可用 $("#itlike").attr("disabled","disabled");
$.ajax({    
url : 'url',    
dataType : 'json',    
type : 'post',    
success : function (data) {        
if (data.success) {          
// 提交成功做跳转处理
} else {            
// 处理失败,重新绑定点击事件
// 让按钮可用 
$("#itlike").removeAttr("disabled");
   }
 }
});

 

Web大前端面试题-Day5的更多相关文章

  1. Web大前端面试题-Day12

    1.前端需要注意哪些SEO? 合理的title.description.keywords: 搜索对着三项的权重逐个减小, title值强调重点即可, 重要关键词出现不要超过2次, 而且要靠前, 不同页 ...

  2. Web大前端面试题-Day7

    1. 你能描述一下渐进增强和优雅降级之间的不同吗? 定义: 优雅降级(graceful degradation): 一开始就构建站点的完整功能, 然后针对浏览器测试和修复 渐进增强(progressi ...

  3. Web大前端面试题-Day6

    1.请说明ECMAScript, JavaScript, Jscript之间的关系? ECMAScript提供脚本语言必须遵守的规则. 细节和准则,是脚本语言的规范. 比如:ES5,ES6就是具体的一 ...

  4. Web大前端面试题-Day4

    1. 如何实现瀑布流? 瀑布流布局的原理:1) 瀑布流布局要求要进行布置的元素等宽,   然后计算元素的宽度,   与浏览器宽度之比,得到需要布置的列数;2) 创建一个数组,长度为列数,   里面的值 ...

  5. Web大前端面试题-Day11

    86.如何获得高效的数据库逻辑结构? 从关系数据库的表中 删除冗余信息的过程 称为数据规范化, 是得到高效的关系型数据库表的逻辑结构 最好和最容易的方法. 规范化数据时应执行以下操作: 1.将数据库的 ...

  6. Web大前端面试题-Day10

    1. px和em的区别? px和em都是长度单位; 区别是: px的值是固定的,指定是多少就是多少, 计算比较容易. em得值不是固定的,并且em会继承父级元素的字体大小. 浏览器的默认字体高都是16 ...

  7. Web大前端面试题-Day8

    1. 说说你对作用域链的理解? 作用域链的作用是保证执行环境里 有权访问的变量和函数是有序的, 作用域链的变量只能向上访问, 变量访问到window对象即被终止, 作用域链向下访问变量是不被允许的; ...

  8. Web大前端面试题-Day1

    1. var的变量提升的底层原理是什么? JS引擎的工作方式是:1) 先解析代码,获取所有被声明的变量:2)然后在运行.也就是说分为预处理和执行两个阶段. 变量提升:所有变量的声明语句都会被提升到代码 ...

  9. Web大前端面试题-Day9

    1. 请用至少3中方式实现数组去重? 方法一: indexOfvar arr1=[1,2,3,4,5,4,3,2,1];  function repeat1(arr){    for(var i=0, ...

随机推荐

  1. ubuntu下安装intel realsense驱动

    在安装之前一定要确保系统是ubuntu 14.04.3 64位! 由于一开始安装的是32位系统,导致在升级内核版本到4.4时各种问题,最终靠重装系统解决. 因为intel给出的测试代码均是在64位14 ...

  2. SpringBoot集成监控管理

    (1).添加starter依赖 <dependency> <groupId>org.springframework.boot</groupId> <artif ...

  3. 转载 - CNN感受野(receptive-fields)RF

    本文翻译自A guide to receptive field arithmetic for Convolutional Neural Networks(可能需要FQ才能访问),方便自己学习和参考.若 ...

  4. 五、regularized线性回归练习(转载)

    转载链接:http://www.cnblogs.com/tornadomeet/archive/2013/03/17/2964515.html 前言: 本节主要是练习regularization项的使 ...

  5. MR数据生成工具指向目录

    mrDataTidy_SaveTwoDays.jar 原始路径 :D:\太原MR数据\一天数据整理 目标路径 : D:\MR现场数据整理\保存两天_整理后数据 例如 当前时间:2017-5-17 10 ...

  6. 巧用CASE WHEN 验证用户登录信息

    最近逛博客园的时候偶然看到一个很巧妙的SQL,巧妙利用CASE WHEN 实现一个简单的 SQL 同时验证用户帐号是否存在.密码是否正确.晓菜鸟之前的做法都是根据用户名和密码一起验证,如果验证失败直接 ...

  7. odoo之model参数属性1

    1.基础文件及目录结构 在认识odoo ORM框架前,先介绍一下odoo中模块目录结构.   data:存放模块预制数据 i18n:存放国际化文件 models:存放模型等py代码 security: ...

  8. HDU 1573

    /* 同余方程组为 X = ri (mod ai) 在范围内求X的个数 先求出特解 X0: 求出 ai数组的LCM: 则有 Xi = X0+LCM 均能满足方程组,判断是否在范围内!! */ #inc ...

  9. Ex 6_1 和最大的相连子序列..._第五次作业

    设数值列表a0,a1 . . . an存放在数组arr[0. . .n]中. sum[0],sum[1],sum[2] . . . .sum[n]为以该下标为终点元素的连续子序列的和的最大值,则sum ...

  10. Ex 6_9 某个字符串处理语言提供了一个将字符串一分为二的基本操作..._第六次作业

    设字符串的长度为n,整型数组arr[0. . .n-1]的第一个数和最后一个数为开始点与结束点的位置,中间的数为拆分点的位置,设cost[i,j]为第i个分割点到第j个分割点的最小代价,两个分割点之间 ...