1.什么是闭包?举例说明
从作用域链谈闭包
闭包就是能够读取其他函数内部变量的函数,
闭包实现累加效果
function addcount(){
var num = 0;
return function(){
return num += 1;
}
}
var add = addcount();
console.log(add());
console.log(add());
3.冒泡机制实现数组排序 从小到大
var arr = [7,4,9,1,6,2];
function sortAt(num){
for(var i = 0 ;i < arr.length-1; i++ ){
for(var j = i+1; j < arr.length;j++){
var v = arr[i]; //前一个的值
if(v > arr[j]){
var index = arr[j]; //后一个的值
arr[i] = index;
arr[j] = v;
}
}
}
return arr;
}
console.log(sortAt(arr));
6.Js实现继承的方法
第一种方法,借用构造函数实现继承
function Person(){
this.name = "nana"
}
function Teacher(){
Person.call(this);
this.type="teacher";
}
Teacher无法继承Person的原型对象,并没有真正的实现继承(部分继承);
第二种方法,借用原型链实现继承
function Person(){
this.name = "nana";
this.play = 123;
}
function Teacher(){
this.type="teacher";
}
Teacher.prototype = new Person();
7.DOM事件
DOM事件模型是什么:指的是冒泡和捕获;
DOM事件流是什么:捕获阶段 => 目标阶段 => 冒泡阶段
DOM事件捕获的具体流程:window=>document=>html标签=>body=>目标对象
8.事件委托
事件委托就是利用冒泡的原理,把事件加到父元素或祖先元素上,触发执行效果。
<ul id="list">
<li>item1</li>
<li>item2</li>
<li>item3</li>
</ul>var list = document.getElementById("list");
list.addEventListener('click',function(event){
event = event || window.event;
var target = event.target || event.srcElement;
if(target.nodeName == "LI"){
alert(target.innerHTML);
}
})
9.事件监听
.onclick 常规的事件绑定只执行最后绑定的事件
btn.addEventListenter('click',function(){}) //可绑定多个事件
btn.attachEvent("onclcik",function(){})
10.ajax跨域
ajax出现请求跨域错误问题。主要是因为浏览器的“同源策略”。同源策略指的是协议相同,域名相同,端口相同。
如何解决ajax跨域问题
1.jsonp。客户端网页通过添加了一个script元素,向服务器请求json数据,这种做法不受同源政策;
2.代理请求方式解决接口跨域问题;配置proxy
11.mouseover 和 mouseenter的区别
mouseover,当指针穿过被选元素和子元素时,都会被触发;
mouseenter ,当指针穿过被选元素时会被触发;
12.行内点击事件改变样式
onclick="style.backgroundColor ='red';style.Color='#333';"
13.js中判断JSON数据是否存在某字段的方法
方法一: !('key' in obj)
方法二:obj.hasOwnProperty('key')
15.作用域知识点
window.val = 1;
var json = {
val:10,
a:function(){
this.val *= 2;
return this.val;
}
}
console.log(json.a());
var a = json.a;
console.log(a());
json.a.call(window);
console.log(json.a());
console.log(window.a()) ;
//20
//2
//40
//8
16.作用域知识点
a方法里作用域属于window环境,所以此时,val的的值属于window.val =1 ;
;(function(){
var val = 1;
var json = {
val:10,
a:function(){
val *= 2;
}
};
json.a();
console.log(json.val + val)
}())//12
18.原型链继承知识点
B继承A.prototype原型链上的方法;但属性不继承;
构造函数如果有属性时,会先找构造函数里的属性值,如果没有,继续找prototype上是否有属性一值;
function A(x){
this.x = x;
}
A.prototype.x = 1;
function B(x){
this.x =x;
}
B.prototype = new A();
var a = new A(2);
var b = new B(3);
delete b.x;
console.log(a.x);
console.log(b.x);
// 2
//undefined
22. 下面的代码会输出什么?为啥?
for(var i = 0; i < 5; i++) {
setTimeout(
function() { console.log(i);
}, i * 1000 );
}
输出5个5
25.神马是 NaN,它的类型是神马?怎么测试一个值是否等于 NaN?
NaN (Not a Number 它不是一个数字) 类型是Number, isNaN()
isNaN(23) //false isNaN('true') //true
26.值类型和引用类型的区别
值类型 :将变量中的数据完整的拷贝一份,赋值给新的变量
var num = 123; var num1 = num;
console.log(num + num1) //123,123
num = 1;
console.log(num + num1) //1,123
引用类型:表示变量存储的是数据的地址,复制时只是把地址复制一份,同时指向数据
var o ={n:123}; var o1 = o;
console.log(o.n + o1.n); //123,123
o1.n = 1;
console.log(o.n + o1.n); //1,1
27.深拷贝和先拷贝
浅复制是对对象地址的复制,并没有开辟新的栈,也就是复制的结果是两个对象指向同一个地址,修改其中一个对象的属性,则另一个对象的属性也会改变。
深复制则是开辟新的栈,两个对象对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性。
function deepCopy (data) {
return JSON.parse(JSON.stringify(data));
}
28.call和apply方法;
作用:.改变执行上下文 实现继承
第一个参数 指向的是一个对象(调用对象),只是apply的参数只有2个,第2个参数其实是一个伪数组
function superClass () {
this.a = 1;
this.print = function () {
console.log(this.a);
}
}
function subClass () {
superClass.call(this);
this.print();
}
subClass();
29.cmd和amd 的区别
cmd和amd都是模块开发的一种规范(模块定义规范),amd加载模块是提前加载模块,cmd是延迟加载,就近加载
define(function(require,exports,module{
var a=require('./a')
a.doSomething()
var b=require('./b')
b.doSomething();
}) //cmd
define(['./a','./b'],function(a,b){
a.doSomething()
b.doSomething()
}) //amd
html&&css
1.alt和title的异同
alt是图片加载失败时,显示在网页上替代的字;搜索引擎对图片的判断,主要是靠alt属性。以简要文字说明,同时包含关键字。
title是鼠标放在图片上,显示的文字,是对图片进一步的说明;
2.简述一下src和href的区别;
href用于锚点或者文档之间的链接,用于超链接;
src指向外部资源的位置,指向的内容将会嵌套在文档中当前标签所在位置;例如img,script;
3.html5新元素;
新的表单控件;date、time、email
新的特殊内容标签;footer、header、nav、aside
对本地离线储存有了更好的支持;
用于媒介回放的video和audio;
4.什么是css hack
针对不同的浏览器写不同的css,就是css hark;
ie7 *background:blue; ie5 _background:red;
前缀加_或者*......
5.px和em的区别
px的值是固定的,是绝对单位,指定多少是多少,写出来的大小只能和设计稿上的一样;
em的值是相对于父级,是个相对元素,每次换算可能费点时间,考虑父元素的设置大小;
rem是相对元素,指相对于根元素也就是html;html{font-size:62.5%} h1{font-size:2.4rem}
6.html5离线储存
localStorage :长期储存数据,浏览器关闭后数据也不会丢失
sessionStorage :数据在浏览器关闭后自动删除;
7.移动端事件延迟300毫秒的问题
为什么会有300毫秒的延迟等待时间;这与双击缩放的方案有关;浏览器捕获第一次单击后。会先等待一段时间,如果这段时间里,用户进行了第二次单击操作,则浏览器会进行双击事件处理;如果没有,则进行单击事件的处理。
解决方案1:meta标签禁止缩放
解决方案2:fastclick.js
8.服务器返回状态了解
301,302 重定向;
304 带缓存刷新;
500 服务器错误;