面试准备

2016-08-20  本文已影响0人  还是那个西瓜

JS 基础

数据类型

JavaScript的数据类型分为两类,原始类型和对象类型

原始类型

除了这些原始类型外其他的都是对象类型

null 和 undefined 区别

null用来描述空值;undefined用来表明变量没有初始化

typeof null => object

typeof undefined => undefined


Number 常用函数

String 常用函数

Array 常用函数


函数作用域

变量在声明他们的函数体以及这个函数体嵌套的任意函数体内部都是有定义的

声明提前

由于JavaScript函数作用域的特性,变量甚至在声明之前就已经可用。JavaScript函数中声明的所有变量都被“提前”至函数体的顶部(只是声明被提前了,并不代表赋值也被提前

作用域链

每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

当代码在一个环境中执行时,会创建变量对象的一个作用域链。

作用域链的前端,始终是当前执行的代码所在环境的变量对象。作用域链中下一个变量对象来自包含环境,再下一个变量对象来自下一个包含环境。这样,一直延续到全局执行环境。全局执行环境的变量对象始终是作用域链的最后一个对象。

作用域链的用途是保证对执行环境有权访问的所有变量的有序访问。


闭包

闭包是指有权访问另一个函数作用域的变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量

简单理解:函数执行完以后,函数中的变量没有被销毁,被它返回的子函数调用。

闭包有三个特性

使用闭包的好处


this 关键字

this是JavaScript的一个关键字。

它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。


定义类


类的继承

现在有一个Animal对象的构造函数

function Animal() {
    
    this.species = "Animal";
        
}

还有一个Cat对象的构造函数

function Cat(name, color) {
        
    this.name = name;
    this.color = color;
    
}

需要使Cat继承Animal


Ajax

异步JavaScript和XML

AJAX包括以下几个步骤
  1. 实例化XMLHttpRequest对象
  2. 用open方法指定HTTP动词,请求的网址,是否异步
  3. 绑定想用HTTP请求状态变化的函数
  4. 发送HTTP请求
  5. 获取异步调用返回的数据
  6. 使用JavaScript和DOM实现局部刷新
readyState值
事件监听端口
上传进度事件
var xhr = new XMLHttpRequest();
xhr.open("POST", "/server", true);
xhr.onload = function() {};

xhr.upload.onprogress = funciton(e) {
    
    if(e.lengthComputable) {
        console.log(e.loaded);
        console.log(e.total);
    }

}

xhr.send(new FormData());

文件上传


JSONP

JSON

JSON是一种基于文本的数据交换方式,或者叫做数据描述格式。

JSONP

JSONP只支持GET方法

首先在浏览器端注册一个callback

然后把callback的名字追加在要跨域请求的url上通过 <script>传给服务器。

服务器得到callback的数值后,生成js脚本 callback(data)。(也就是说,服务器端的js脚本是动态生成的)

浏览器端运行服务器端传回来的js脚本


常见状态码


客户端存储

localStorage 和 SessionStorage都是持久化关联数组,两者的区别在于存储有效期和作用域不同:数据可以存储多长时间以及谁拥有数据的访问权。

localstorage

通过localStorage存储的数据是永久性的,除非刻意删除存储的数据,否则数据将一直保留在用户的电脑上,永不过期。

localStorage的作用域是限定在文档源级别的。文档源是通过协议,主机名以及端口三者来实现的。

sessionStorage

sessionStorage的有效期和存储数据的脚本所在的窗口或浏览器标签页是一样的。也就是说,一旦窗口或者标签页被永久关闭了,那么所有通过sessionStorage存储的数据也都被删除了。

sessionStorage的作用域也被限定在窗口中。如果同源的文档渲染在不同的浏览器标签中,那么它们相互之间拥有的是各自的sessionStorage数据,无法共享。

cookie

cookie是存储在浏览器的少量数据,cookie数据会自动在Web浏览器和Web服务器之间传输。

cookie默认的有效期很短暂,它只能持续在web浏览器的会话期间,一旦用户关闭浏览器,cookie保存的数据就丢失了,如果想要延长cookie的有效期,可以通过设置max-age属性(单位是s)

cookie的作用域是通过文档源和文档路径来确定的。该作用域是通过cookie的domain和path配置的。默认情况下,cookie和创建它的Web页面有关,并对该Web页面以及和该Web页面同目录或者子目录的其他web页面可见。

局限性

不允许浏览器保存超过300个cookie,每个web服务器保存的cookie不超过20个,每个cookie的大小都能超过4kb

由于cookie的实现机制,一旦服务器端向客户端发送了设置cookie的意图,除非cookie过期,否则客户端每次请求都会发送这些cookie到服务器端,一旦设置的Cookie过多,将会导致报头较大。大多数cookie并不需要每次都用到,因此这会造成带宽的部分浪费。

YSlow规则:为静态组件使用不同的域名

因为cookie可以在前后端进行修改,cookie使用不当会被篡改和伪造。

cookie 操作
session

Session是存储在服务器端的数据

一旦服务器端启用了session,它将约定一个键值作为Session的口令,这个值可以随意约定,比如Tomcat会采用JSESSIONID。一旦服务器检查到用户请求的cookie中没有携带该值,它就会为之生成一个值,这个值是唯一且不可重复的值,并设定超时时间。

每个请求到来时,检查cookie中的口令与服务器端的数据,如果过期,则重新生成session。

在响应中把session的口令写入cookie传给客户端。

setTimeout和setTimeInterval

JavaScript引擎是单线程运行的,无论在什么时候都有且只有一个线程在运行JavaScript程序。

setTimeout或者setTimeInterval的设置的时间参数的具体意思是:在参数指定的时间后将等待执行方法放到执行队列中。如果队列中没有其他方法等待,则会立即执行setTimeout和setTimeInterval指定的方法,因此有时给人好像是立即执行的假象。

如果队列非空,引擎就会从队列头取出一个任务,直到该任务完成,即返回后引擎接着运行下一个任务。在任务没返回前队列中的其他任务是没法被执行的。

如果任务需要的时间非常长,远大于setTimeInterval的定时间隔,那么定时触发线程就会源源不断的产生异步定时事件并放到任务队列尾而不管它们是否已被处理。

上一篇 下一篇

猜你喜欢

热点阅读