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

  1. /**
  2. * 深拷贝
  3. * @param {object}fromObj 拷贝的对象
  4. * @param {object}toObj 目标对象
  5. */
  6. function deepCopyObj2NewObj(fromObj, toObj) {
  7. for(var key in fromObj){
  8. // 1. 取出键值对
  9. var fromValue = fromObj[key];
  10. // 2. 检查当前的属性值是什么类型
  11. if(!isObj(fromValue)){ // 如果是值类型,那么就直接拷贝赋值
  12. toObj[key] = fromValue;
  13. }else {
  14. // 如果是引用类型,
  15. // 那么就再调用一次这个方法,
  16. // 去内部拷贝这个对象的所有属性
  17. var tempObj = new fromValue.constructor;
  18. console.log(fromValue.constructor);
  19. deepCopyObj2NewObj(fromValue, tempObj);
  20. toObj[key] = tempObj;
  21. }
  22. }
  23. }
  24.  
  25. /**
  26. * 辅助函数, 判断是否是对象
  27. * @param {object}obj
  28. * @returns {boolean}
  29. */
  30. function isObj(obj) {
  31. return obj instanceof Object;
  32. }

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

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

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

  1. es四种方式:
  2. Array.prototype.unique1 = function() {
  3. // 1. 定义数组
  4. var temp = [];
  5. // 2. 遍历当前数组
  6. for(var i = 0; i < this.length; i++) {
  7. // 3.如果当前数组的第i已经保存进了临时数组,
  8. // 那么跳过,否则把当前项push到临时数组里面
  9. if (-1 === temp.indexOf(this[i])) {
  10. temp.push(this[i]);
  11. }
  12. }
  13. return temp;
  14. };
  15.  
  16. Array.prototype.unique2 = function() {
  17. //1. hash为hash表,r为临时数组
  18. var hash = {}, temp=[];
  19. // 2.遍历当前数组
  20. for(var i = 0; i < this.length; i++)
  21. {
  22. // 3. 如果hash表中没有当前项
  23. if (!hash[this[i]])
  24. {
  25. // 4.存入hash表
  26. hash[this[i]] = true;
  27. // 5.把当前数组的当前项
  28. // push到临时数组里面
  29. temp.push(this[i]);
  30. }
  31. }
  32. return temp;
  33. };
  34.  
  35. Array.prototype.unique3 = function() {
  36. var n = [this[0]];
  37. for(var i = 1; i < this.length; i++){
  38. if (this.indexOf(this[i]) === i) {
  39. n.push(this[i]);
  40. }
  41. }
  42. return n;
  43. };
  44.  
  45. Array.prototype.unique4 = function() {
  46. this.sort();
  47. var re=[this[0]];
  48. for(var i = 1; i < this.length; i++)
  49. {
  50. if( this[i] !== re[re.length-1])
  51. {
  52. re.push(this[i]);
  53. }
  54. }
  55. return re;
  56. };
  57.  
  58. es6:
  59.  
  60. Array.prototype.unique =
  61. Array.prototype.unique
  62. || function () {
  63. return [...new Set(this)];
  64. };

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

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

  

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

  1. // 点击提交按钮的时候,
  2. // 把这个提交这个处理函数给解绑掉,
  3. // 请求完成的时候在绑定回来
  4.  
  5. function clickHandler(){
  6. $(this).unbind('click', clickHandler);
  7. $.ajax({
  8. url : 'url',
  9. dataType : 'json',
  10. type : 'post',
  11. success : function (data) {
  12. if (data.success) {
  13. //提交成功做跳转处理
  14. } else {
  15. //处理失败,重新绑定点击事件
  16. $(self).click(clickHandler);
  17. }
  18. }
  19. });
  20. }
  21. $('#itlike').click(clickHandler);
  22.  
  23. // 可以点击后让按钮不可用,
  24. // 如果提交失败可以再次设置为可用
  25.  
  26. // 1.让按钮不可用
  27. $("#itlike").attr("disabled","disabled");
  28. $.ajax({
  29. url : 'url',
  30. dataType : 'json',
  31. type : 'post',
  32. success : function (data) {
  33. if (data.success) {
  34. // 提交成功做跳转处理
  35. } else {
  36. // 处理失败,重新绑定点击事件
  37. // 让按钮可用
  38. $("#itlike").removeAttr("disabled");
  39. }
  40. }
  41. });

撩课-Web大前端每天5道面试题-Day5的更多相关文章

  1. 撩课-Web大前端每天5道面试题-Day10

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

  2. 撩课-Web大前端每天5道面试题-Day4

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

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

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

  4. 撩课-Web大前端每天5道面试题-Day11

    1. 如何手写一个JQ插件? 方式一: $.extend(src) 该方法就是将src合并到JQ的全局对象中去: $.extend({ log: ()=>{alert('撩课itLike');} ...

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

    1.web storage和cookie的区别? Web Storage的概念和cookie相似, 区别是它是为了更大容量存储设计的. Cookie的大小是受限的, 并且每次你请求一个新的页面的时候C ...

  6. 撩课-Web大前端每天5道面试题-Day25

    1.web前端开发,如何提高页面性能优化? 内容方面: .减少 HTTP 请求 (Make Fewer HTTP Requests) .减少 DOM 元素数量 (Reduce the Number o ...

  7. 撩课-Web大前端每天5道面试题-Day7

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

  8. 撩课-Web大前端每天5道面试题-Day30

    1.什么叫优雅降级和渐进增强? 优雅降级: Web站点在所有新式浏览器中都能正常工作, 如果用户使用的是老式浏览器, 则代码会针对旧版本的IE进行降级处理了, 使之在旧式浏览器上以某种形式降级体验却不 ...

  9. 撩课-Web大前端每天5道面试题-Day23

    1.为什么用Nodejs,它有哪些优缺点? 优点: 事件驱动,通过闭包很容易实现客户端的生命活期. 不用担心多线程,锁,并行计算的问题 V8引擎速度非常快 对于游戏来说,写一遍游戏逻辑代码,前端后端通 ...

随机推荐

  1. 【OCP认证12c题库】CUUG 071题库考试原题及答案(28)

    28.choose the best answer Evaluate the following SQL statement: SQL> SELECT promo_id, promo_categ ...

  2. 《快学Scala》第八章 继承

  3. 【表单验证】基于jQuery的高度灵活的表单验证(无UI)

    表单验证是前端开发过程中常见的一个需求,产品需求.业务逻辑的不同,表单验证的方式方法也有所区别.而最重要的是我们要清楚,表单验证的核心原则是--错误信息提示准确,并且尽可能少的打扰/干扰用户的输入和体 ...

  4. iOS 计算文字宽度的一个细节

    设计师给到的图,经常是 "按钮的左边距离文字右边5px" 这样子的标注.于是我们需要计算文字的宽度. 有两种方法: 用 label 或 button 的 sizetofit 方法 ...

  5. .NET Core容器化之多容器应用部署-使用Docker-Compose

    原文补充: -- docker-compose.ymlversion: ' services: mvc-web: container_name: mvc.web.compose build: . re ...

  6. 大数据-HBase HA集群搭建

    1.下载对应版本的Hbase,在我们搭建的集群环境中选用的是hbase-1.4.6 将下载完成的hbase压缩包放到对应的目录下,此处我们的目录为/opt/workspace/ 2.对已经有的压缩包进 ...

  7. 论文分享NO.1(by_xiaojian)

    论文分享第一期-2019.03.14: 1. Non-local Neural Networks  2018 CVPR的论文 2. Self-Attention Generative Adversar ...

  8. SASS的安装和转换为CSS的方法

    http://www.cnblogs.com/52css/archive/2012/08/19/sass-how-to-install-and-use.html SASS的安装方法: 1.先安装Rub ...

  9. jquery mobile 动态加载标签时,无法正常展示样式

    原因 在chrome中审查元素,发现其增加了很多没有直接写在页面上的标签和样式.页面标签首先经过jquery.mobile-1.4.5.min.js的处理,添加了许多标签,然后再用css布局 解决方案 ...

  10. GitHub注册和Git安装

    一.注册GitHub GitHub官方地址:https://github.com. 在浏览器中打开GitHub网址,通过首页进行注册,如下图所示. 二.安装Git Git官方下载地址:http://g ...