前端开发工程师面试JavaScript的基础模块汇总.docx

上传人:b****6 文档编号:14137315 上传时间:2023-06-20 格式:DOCX 页数:12 大小:2.24MB
下载 相关 举报
前端开发工程师面试JavaScript的基础模块汇总.docx_第1页
第1页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第2页
第2页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第3页
第3页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第4页
第4页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第5页
第5页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第6页
第6页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第7页
第7页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第8页
第8页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第9页
第9页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第10页
第10页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第11页
第11页 / 共12页
前端开发工程师面试JavaScript的基础模块汇总.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

前端开发工程师面试JavaScript的基础模块汇总.docx

《前端开发工程师面试JavaScript的基础模块汇总.docx》由会员分享,可在线阅读,更多相关《前端开发工程师面试JavaScript的基础模块汇总.docx(12页珍藏版)》请在冰点文库上搜索。

前端开发工程师面试JavaScript的基础模块汇总.docx

前端开发工程师面试JavaScript的基础模块汇总

前端开发面试JavaScript的基础模块汇总

目录

前端开发面试JavaScript的基础模块汇总1

1.变量提升1

2.函数提升1

3.数据的基本类型2

4.typeof的返回值2

5.函数声明和函数表达式2

6.立即调用函数函数3

7.闭包3

8.事件顺序3

9.原型4

10.原型的使用方法4

11.原型链5

12.js的对象6

13JSON7

14.this指向问题7

15.面向对象8

16.封装8

17.跨域问题8

1.变量提升

所有的函数和变量声明都会被提升到最前面,并且变量声明永远在前面,赋值在声明过程之后。

1.var把变量声明成了undefined

2.let把变量声明成了uninitialized

2.函数提升

函数的声明方式主要由两种:

声明式和变量式。

1)声明式会自动将声明放在前面并且执行赋值过程

 2)、变量式则是先将声明提升,然后到赋值处再执行赋值

带有命名的函数变量式声明,是不会提升到作用域范围内的

3.数据的基本类型

number

   string

   boolean

   undefined//表示意料之外的不存在的值

   null//表示一个空值

   object

4.typeof的返回值

string

   number

   boolean

   undefined

   object

   function

检测一个对象的类型,强烈推荐使用Object.prototype.toString方法

5.函数声明和函数表达式

1)、 如果functionfoo(){}被包含在一个函数体内,或者位于程序的最顶部的话,那它就是一个函数声明。

  2)、如果functionfoo(){}是作为赋值表达式的一部分的话,那它就是一个函数表达式。

  3)、函数声明总是会在任何表达式被解析和求值之前,最先被解析和求值。

  4)、函数声明在条件语句内虽然可以用,但是没有被标准化,也就是说不同的环境可能有不同的执行结果,所以这样情况下,最好使用函数表达式。

6.立即调用函数函数

在一个表达式后面加上括号(),该表达式会立即执行。

自执行函数,顾名思义,自己执行自己的操作。

自执行其实也是一个立即执行函数。

7.闭包

用途:

 1)、读取函数内部的变量

 2)、使变量的值始终保持在内存中

 3)、用闭包模拟私有方法

 4)、在循环中创建闭包

注意点:

   由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,在IE中可能导致内存泄露。

解决方法是,在退出函数之前,将不使用的局部变量全部删除。

   闭包会在父函数外部,改变父函数内部变量的值。

所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(PublicMethod),把内部变量当作它的私有属性(privatevalue),这时一定要小心,不要随便改变父函数内部变量的值。

8.事件顺序

1.       EventCapturing(事件捕获)

   2.       EventBubbling(事件冒泡)

   3.       进入事件捕获阶段->达到元素后->进入事件冒泡阶段。

   4.       事件代理的意思就是只监听父节点的事件触发,以来代理对其后代节点的监听,而你需要做的只是通过currentTarget属性得到触发元素并作出回应

9.原型

1)、每个函数都有一个原型属性prototype指向函数自身的原型

  2)、由这个函数创建的对象(实例)也有一个__proto__属性指向这个原型

  3)、函数原型是一个对象,所以这个对象也会有一个__proto__指向自己的原型

  4)、这样逐层深入直到Object对象的原型(null),这样就形成了原型链

  5)、作用是为了数据共享,创建对象的时候,我们会把公共的方法和属性挂载到原型上,避免资源浪费。

10.原型的使用方法

1、通过给函数对象的prototype属性赋值对象字面量来设定对象的原型

   2、赋值原型prototype的时候使用function立即执行的表达式来赋值

  3、分别设置原型对象

11.原型链

1、原型对象也有自己的原型,直到对象的原型为null为止。

一级一级的链结构就是原型链。

  2、真正形成原型链的是每个对象的__proto__属性,而不是函数的prototype属性

Object.prototype的hasOwnProperty方法能够判断一个对象是否包含自定义属性而不是原型链上的属性。

它是JavaScript中唯一一个处理属性但是不查找原型链的函数。

new运算符接受一个函数F及其参数:

newF(arguments...)。

这一过程分为三步:

   1.    创建类的实例。

这步是把一个空的对象的proto属性设置为F.prototype。

   2.    初始化实例。

函数F被传入参数并调用,关键字this被设定为该实例。

   3.    返回实例。

12.js的对象

基本类型Number,String,Boolean,null,undefined

   对象类型Function,Object,Array

可变现:

 

对象类型之所以为对象类型,是因为它们可以直接的添加和删除属性。

而基本类型不可以随意改变。

比较和传递

 基本类型通过值来比较(即使赋值的过程实际是创建了一个拷贝,比较是各个拷贝之间的比较),而对象类型通过引用来比较。

两个对象的值是否相同取决于它们是否指向相同的底层对象(改变一个对象的值将更新另外一个对象的值)。

基本类型调用对象类型的方法:

 

在String中调用.length会使用String()构造函数临时将基本类型转变成对象(包裹成对象),允许你使用length方法而改变它,这个临时对象被称为包装对象。

13JSON

有非常严格的语法,在string上下文里只有{"prop":

"val"}是个合法的JSON。

他们倾向于使用string字符串,因为string在很多语言里解析的方式都差不多。

JSON对象,目前有2个静态方法:

   1.    JSON.parse:

用来将JSON字符串反序列化成对象

   2.    JSON.stringify:

用来将对象序列化成JSON字符串

14.this指向问题

15.面向对象

面向对象语言的三大特性:

 1)、封装(Encapsulation):

把相关的信息(无论数据或方法)存储在对象中的能力。

 2)、 继承(Inheritance):

由另一个类(或多个类)得来类的属性和方法的能力

 3)、多态(Polymorphism):

编写能以多种方法运行的函数或方法的能力。

其他的一些内容:

1、类(Class):

定义了一件事物的抽象特点,用来构造对象

2、对象(Object):

类的实例化

3、属性(Property):

对象具有的数据

4、方法(Method):

也成消息,用于对象之间传递数据

原型继承与类继承的区别

16.封装

使用构造函数

functionCat(name){this.name=name;}实例化后,this的指向绑定在实例对象上

使用原型优化构造函数

每一个构造函数都有一个prototype属性,指向另一个对象。

这个对象的所有属性和方法,都会被构造函数的实例继承。

所以对于一些公共的内容,我们会选择在内存中只生产一次,可以使用prototype 

验证原型方法

 1、isPrototypeOf():

判断某个proptotype对象和某个实例之间的关系,eg.alert(Cat.prototype.isPrototypeOf(cat1));

 2、hasOwnPrototype():

判断某一个属性到底是本地属性(构造函数内属性),还是继承自prototype对象的属性。

eg.alert(cat1.hasOwnProperty("name"));

 3、in:

判断某个属性是否是对象的属性,eg.alert("name"incat1);

4、利用in遍历:

for(varpropincat1){alert("cat1["+prop+"]="+cat1[prop]);}

17.跨域问题

产生跨域的原因

  1、由于前后端分离,前端的页面展示和后端的api通常都部署在不同的服务器或者域名上,ajax请求WebService的时候,就会出现同源策略的问题。

  2、同源策略的定义:

如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就属于同一个源(origin)。

哪些情况会产生跨域问题

  1、一个网站的网址组成包括协议名,子域名,主域名,端口号。

比如,其中https是协议名,www是子域名,github是主域名,端口号是80,当在在页面中从一个url请求数据时,如果这个url的协议名、子域名、主域名、端口号任意一个有一个不同,就会产生跨域问题。

  2、即使是在http:

//localhost:

80/页面请求http:

//127.0.0.1:

80/也会有跨域问题。

解决跨域问题

1、使用jsonp

2、服务端代理

3、服务端设置RequestHeader头中Access-Control-Allow-Origin为指定可获取数据的域名

JSONP

  1、原理:

浏览器的script标签是不受同源策略限制(你可以在你的网页中设置script的src属性问cdn服务器中静态文件的路径)。

  2、那么就可以使用script标签从服务器获取数据,请求时添加一个参数为callbakc=?

,?

号是你要执行的回调方法。

   服务端做什么判断呢,当参数中带有callback属性时,返回的type要为application/javascript,把数据作为callback的参数执行。

下面是jsonp返回的数据的格式示例。

例如:

前端请求

后台返回:

如果没有后面的callback参数,即不使用JSONP的模式,该服务的返回结果可能是一个单纯的json字符串,比如:

{foo:

'bar'}。

但是如果使用JSONP模式,那么返回的是一个函数调用:

mycallback({foo:

'bar'}),这样我们在代码之中,定义一个名为mycallback的回调函数,就可以解决跨域问题了。

服务端设置Access-Control-Allow-Origin

这种方式只要服务端把response的header头中设置Access-Control-Allow-Origin为制定可请求当前域名下数据的域名即可。

一般情况下设为即可。

这样客户端就不需要使用jsonp来获取数据。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2