您的位置首页  网络科技  前端

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

  毕业季,面试月,相信刷题的人很多,本系列将把面试中常遇到的各个领域的问题集合起来,做一个集锦。

  希望对大家有帮助。文章比较长,涵盖的内容比较多,但是作为一个系统的学习还常有帮助的。

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

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

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

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

  自执行函数,顾名思义,自己执行自己的操作。自执行其实也是一个立即执行函数。

  由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

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

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

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

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

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

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

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

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

  1、原型对象也有自己的原型,直到对象的原型为null为止。一级一级的链结构就是原型链。

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

  Object.prototype的hasOwnProperty方法能够判断一个对象是否包含自定义属性而不是原型链上的属性。它是Java中唯一一个处理属性但是不查找原型链的函数。

  1. 创建类的实例。这步是把一个空的对象的proto属性设置为F.prototype。

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

  对象类型之所以为对象类型,是因为它们可以直接的添加和删除属性。而基本类型不可以随意改变。

  基本类型通过值来比较(即使赋值的过程实际是创建了一个拷贝,比较是各个拷贝之间的比较),而对象类型通过引用来比较。两个对象的值是否相同取决于它们是否指向相同的底层对象(改变一个对象的值将更新另外一个对象的值)。

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

  JSON有非常严格的语法,在string上下文里只有{ prop:val }是个的JSON。他们倾向于使用string字符串,因为string在很多语言里解析的方式都差不多。JSON对象,目前有2个静态方法:

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

  2)、 继承(Inheritance): 由另一个类(或多个类)得来类的属性和方法的能力

  3)、多态(Polymorphism): 编写能以多种方法运行的函数或方法的能力。

  每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。所以对于一些公共的内容,我们会选择在内存中只生产一次,可以使用prototype

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

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

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

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

  2、那么就可以使用标签从服务器获取数据,请求时添加一个参数为callbakc=?,?号是你要执行的回调方法。

  服务端做什么判断呢,当参数中带有callback属性时,返回的type要为application/java,把数据作为callback的参数执行。下面是jsonp返回的数据的格式示例。

  如果没有后面的callback参数,即不使用JSONP的模式,该服务的返回结果可能是一个单纯的json字符串,比如:{ foo : bar }。但是如果使用JSONP模式,那么返回的是一个函数调用: mycallback({ foo : bar}),这样我们在代码之中,定义一个名为mycallback的回调函数,就可以解决跨域问题了。

  这种方式只要服务端把response的header头中设置Access-Control-Allow-Origin为制定可请求当前域名下数据的域名即可。一般情况下设为即可。这样客户端就不需要使用jsonp来获取数据。

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186
友荐云推荐