Web大前端面试题-Day5
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的更多相关文章
- Web大前端面试题-Day12
1.前端需要注意哪些SEO? 合理的title.description.keywords: 搜索对着三项的权重逐个减小, title值强调重点即可, 重要关键词出现不要超过2次, 而且要靠前, 不同页 ...
- Web大前端面试题-Day7
1. 你能描述一下渐进增强和优雅降级之间的不同吗? 定义: 优雅降级(graceful degradation): 一开始就构建站点的完整功能, 然后针对浏览器测试和修复 渐进增强(progressi ...
- Web大前端面试题-Day6
1.请说明ECMAScript, JavaScript, Jscript之间的关系? ECMAScript提供脚本语言必须遵守的规则. 细节和准则,是脚本语言的规范. 比如:ES5,ES6就是具体的一 ...
- Web大前端面试题-Day4
1. 如何实现瀑布流? 瀑布流布局的原理:1) 瀑布流布局要求要进行布置的元素等宽, 然后计算元素的宽度, 与浏览器宽度之比,得到需要布置的列数;2) 创建一个数组,长度为列数, 里面的值 ...
- Web大前端面试题-Day11
86.如何获得高效的数据库逻辑结构? 从关系数据库的表中 删除冗余信息的过程 称为数据规范化, 是得到高效的关系型数据库表的逻辑结构 最好和最容易的方法. 规范化数据时应执行以下操作: 1.将数据库的 ...
- Web大前端面试题-Day10
1. px和em的区别? px和em都是长度单位; 区别是: px的值是固定的,指定是多少就是多少, 计算比较容易. em得值不是固定的,并且em会继承父级元素的字体大小. 浏览器的默认字体高都是16 ...
- Web大前端面试题-Day8
1. 说说你对作用域链的理解? 作用域链的作用是保证执行环境里 有权访问的变量和函数是有序的, 作用域链的变量只能向上访问, 变量访问到window对象即被终止, 作用域链向下访问变量是不被允许的; ...
- Web大前端面试题-Day1
1. var的变量提升的底层原理是什么? JS引擎的工作方式是:1) 先解析代码,获取所有被声明的变量:2)然后在运行.也就是说分为预处理和执行两个阶段. 变量提升:所有变量的声明语句都会被提升到代码 ...
- Web大前端面试题-Day9
1. 请用至少3中方式实现数组去重? 方法一: indexOfvar arr1=[1,2,3,4,5,4,3,2,1]; function repeat1(arr){ for(var i=0, ...
随机推荐
- kali linux 下搭建git服务器
参考:http://www.cnblogs.com/dee0912/p/5815267.html https://www.liaoxuefeng.com/wiki/001373951630592960 ...
- 腾讯云外网IP直通后,遇到网络问题
通过内网机器,先重启网卡 service network restart cd /usr/local/etc ./modify_route.sh
- 【转】Visual Studio——多字节编码与Unicode码
多字节字符与宽字节字符 1) char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t. char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为 ...
- vs2010补丁
背景 我都不知道这是干啥的了.想起.net真是一把鼻涕一把泪.搞了这么久.net,也被它坑了好多.有这时间搞搞开源东西多好.看见下面还有tfs,想起当时有个java同事竟然用vss管理java代码,后 ...
- python 生成器与协程
生成器在迭代中以某种方式生成下一个值并且返回和next()调用一样的东西. 挂起返回出中间值并多次继续的协同程序被称作生成器. 语法上讲,生成器是一个带yield语句的函数.一个函数或者子程序只返回一 ...
- FreeSWITCH IVR中lua调用并执行nodejs代码
一.功能需求: 通过FreeSWITCH的IVR按键调用相应的脚本文件:nodejs提供很多的模组,可以方便的与其它系统或者进行任何形式的通讯,我的应用是通过nodejs发送http post请求: ...
- PYTHON-模块 sys os random shutil
import sys # 环境变量# print(sys.path)# # 查看已经加载的模块# print(sys.modules)# # 获取终端调用时的参数# print(sys.argv)# ...
- 《转》MySQL 5.7版本新特性连载
MySQL 5.7版本新特性连载(一) 本文将和大家一起分享下5.7的新特性,不过我们要先从即将被删除的特性以及建议不再使用的特性说起.根据这些情况,我们在新版本及以后的版本中,应该不再使用,避免未来 ...
- 《剑指offer》-数据流中的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 最开始的思路 ...
- C# int可以表示的最大值
C#中int由4个字节组成,即由32个二进制数组成,由于最高位是用于表示正负数,所以实际上int所能表示的最大数为231-1=2147483647.