前端开发面试题1

腾讯面试常考题https://wenku.baidu.com/view/a09ff561e55c3b3567ec102de2bd960591c6d94a

1、readyState的五种状态:

0 - (未初始化)还没有调用send()方法
1 - (载入)已调用send()方法,正在发送请求
2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
3 - (交互)正在解析响应内容
4 - (完成)响应内容解析完成,可以在客户端调用了

2、用js实现递归:计算n+n-1+n-2+...+1

var add=function(n) {
    if(n==1){
        return 1;
    }else{
        return n+arguments.callee(n-1);
    }
}
alert(add(10))

3、快速排序:https://blog.csdn.net/code_ac/article/details/74158681

4、事件对象event的方法和属性:

      两个常用的方法:阻止默认事件:event.preventDefault()和阻止事件冒泡event.preventPropagation()

      常用属性:event.type:获取事件的类型,如click,mousedown

                        event.pageX event.pageY:获取鼠标当前相对于页面的坐标

                        event.target:获取触发事件的元素

                        event.currentTarget : 获取冒泡前的当前触发事件的DOM对象

                        event.which:获取在鼠标单击事件中鼠标的左、中、右键(左键1,中间键2,右键3)

5、浏览器的缓存机制:

• 浏览器端缓存分为200 from cache和304 not modified

• HTTP协议中Cache-Control 和 Expires可以用来设置新鲜度的限值,前者是HTTP1.1中新增的响应头,后者是HTTP1.0中的响应头。

• max-age(单位为s)而Expires指定的是具体的过期日期而不是秒数

• Cache-Control和Expires同时使用的话,Cache-Control会覆盖Expires

• 客户端不用关心ETag值如何产生,只要服务在资源状态发生变更的情况下将ETag值发送给它就行

• Apache默认通过FileEtag中FileEtag INode Mtime Size的配置自动生成ETag(当然也可以通过用户自定义的方式)。

• ETag常与If-None-Match或者If-Match一起,由客户端通过HTTP头信息(包括ETag值)发送给服务端处理。

• Last-Modified常与If-Modified-Since一起由客户端将Last-Modified值包括在HTTP头信息中发给服务端进行处理。

• 有些文档资源周期性的被重写,但实际内容没有改变。此时文件元数据中会显示文件最近的修改日期与If-Modified-Since不相同,导致不必要的响应。

参考:https://www.cnblogs.com/zhuzhenwei918/p/7390518.html

还没看:https://www.cnblogs.com/shixiaomiao1122/p/7591556.html

Etag和Last-Modified存在的意义

6、this是函数运行时自动生成的一个内部对象,this的指向是由执行环境决定的。

var name = 'tom';
var obj = {
  name : "zhar",
  say : function(){
    console.log(this.name);
  }
}
var fun = obj.say;
fun();//输出 ?//tom-->fun定义在全局环境下,即window.fun()
//再次说明了this的指向是由运行时的执行环境来决定的
var name = 'tom';
var obj = {
  name : "zhar",
  say : function(){
    return function(){
      console.log(this.name);
    }
  }
}
obj.say()();

*构造函数中的this会指向创建出来的实例对象,构造函数中不需要返回值,如果人为指定一个返回值,this的指向将发生变化。

function Person() { this.name = 'zhar'; return {}; }

var p = new Person();

console.log(p.name);//undefined

function Person() { this.name = 'zhar'; return 1;//number string boolean 等 }

var p = new Person();

console.log(p.name);//zhar

通常情况下,不需要设置this的返回值。

*在DOM事件中使用this,是谁调用的,this就指向谁。

*call和apply可以用来修改this指向,例如:

(1)

var name = 'zhar';

function say(){ console.log(this.name); };

say();//zhar;

var obj = { name : 'tom', say : function(){ console.log(this.name); } }

say.call(obj);//tom 将 say 函数中的 this 替换为传入的对象

obj.say();//tom

obj.say.call(null);//zhar 将 obj.say 函数的 this 替换为了 null,也就意味着指向了全局环境

(2)

li.onclick = function(){ console.log(this.innerHTML);//此处的 this 代表着 DOM 元素

function update(){ this.innerHTML += " new "; }

//update();//这样做的话,this 的指向将变为window

update.call(this);//通过 call 方法修改函数内 this 的指向 }

* apply的作用和call一样,不同的是传参的形式。apply需要以数组的形式传递参数

链接:https://www.jianshu.com/p/8d357981dedb

call和apply来自Function.prototype;

所以所有的函数都可以使用;
特点是可以自由指定函数内部的this;
区别是传参的方式不同。

bind

语法:新函数 = 函数.bind(this)

bind和call、apply的异同:

* 1、相同之处是都可以改变函数运行时内部的this

* 2、不同之处是call和apply是一次性改变this,bind是永久性改变this

this的指向为window或对象,this指向的是调用函数的那个对象

7、深拷贝与浅拷贝:https://blog.csdn.net/shuidinaozhongyan/article/details/71440110

浅拷贝:子对象获得的只是一个内存地址,而不是真正拷贝,因此存在父对象被篡改的可能。

深拷贝:(还没看)https://blog.csdn.net/sysuzhyupeng/article/details/70340598

https://blog.csdn.net/xutongbao/article/details/78041920

8、类库与框架的区别:类库中封装好大量实用的函数,来实现各种功能。控制权在自己手中,比如jquery库

框架是已经实现了的web应用,根据具体的应用逻辑来调用自己的代码。

jquery是javascript类库,优势为:轻量级强大的选择器出色的 DOM 操作的封装可靠的事件处理机制完善的 Ajax出色的浏览器兼容性链式操作方式。jquery对象就是jQuery包装DOM后产生的对象,jQuery对象无法使用DOM对象的任何方法,同样DOM对象也不能使用jQuery里的任何方法。

  1. jQuery对象可以转化为DOM对象:jQuery对象是一个数组对象,可以通过【index】的方法得到对应的DOM对象    
  2. DOM 对象转化为jQuery对象:    只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象。             
  3. jquery选择器:它是jQuery的根基,对事件处理,遍历DOM和ajax操作都依赖与选择器。优点是:简洁的写法,完善是事件处理机制。
  4. 基本选择器:是jQuery中最常用的选择器,也是最简单的选择器。通过元素id,class和标签名来查找DOM元素。
  5. 层次选择器:通过DOM元素之间的层次关系来获取特定元素。
  6. https://blog.csdn.net/shuidinaozhongyan/article/details/71747660


 

猜你喜欢

转载自blog.csdn.net/lgl_19910331/article/details/81118230