js面试知识点汇总

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 服务器错误;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342