【Javascript】前端面试基础【每日学习并更新10】

1.闭包

闭包基本概念

  • 闭包就是能够读取其他函数内部变量的函数
  • 闭包是指有权访问另一个函数作用域中变量的函数,创建闭包的最常见的方式就是在一个函数内创建另一个函数,通过另一个函数访问这个函数的局部变量利用闭包可以突破作用链域

闭包的特性

  • 函数内再嵌套函数
  • 内部函数可以引用外层的参数和变量参数和变量不会被垃圾回收机制回收

闭包的理解

  • 使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。在js中,函数即闭泡,只有函数才会产生作用域的概念
  • 闭包的最大用处有两个,一个是可以读取函数内部的变量,另一个就是让这些变量始终保持在内存中。闭包的另一个用处,是封装对象的私有属性和私有方法
  • 好处:能够实现封装和缓存等;
  • 坏处:就是消耗内存、不正当使用会造成内存溢出的问题

使用闭包的注意点

  • 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
  • 解决方法是,在退出函数之前,将不使用的局部变量全部删除

2.说说你对作用域链的理解

  • 作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不被允许的"
  • 简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期

3.JavaScript原型,原型链?有什么特点?

  • 每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype 乂会有自己的prototype ,于是就这样一直找下去,也就是我们平时所说的原型链的概念
  • 关系:instance.constructor.prototype = instance.proto_
  • 特点:JavaScript 对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象也会继承这一改变
  • 当我们需要一个属性的时,Javascript引擎会先看当前对象中是否有这个属性,如果没有的
  • "就会查找他的Prototype对象是否有这个属性,如此递推下去,一直检索到 Object内建对象

4. 请解释什么是事件代理

事件代理(Event Delegation ),又称之为事件委托。是JavaScript中常用绑定事件的常用技巧。顾名思义,"事件代理"即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。

  • 使用事件代理的好处是可以提高性能
  • 可以大量节省内存占用,减少事件注册,比如在table 上代理所有td 的click 事件就非常棒
  • 可以实现当新增子对象时无需再次对其绑定

5 Javascript如何实现继承?·构造继承

  • ·原型继承
  • ·实例继承
  • ·拷贝继承
  • ·原型ptotype机制或apply 和call方法去实现较简单,建议使用构造函数与原型混合方式

6谈谈This对象的理解

  • this 总是指向函数的直接调用者(而非间接调用者)
  • 如果有new关键字, this指向new出来的那个对象
  • 在事件中,this 指向触发这个事件的对象,特殊的是,IE 中的attachEvent 中的this总是指向全局对象window

7事件模型

w3C中定义事件的发生经历三个阶段:

捕获阶段( capturing)、目标阶段( targeting )、冒泡阶段( bubbling )

  • 冒泡型事件:当你使用事件冒泡时,子级元素先触发,父级元素后触发
  • 捕获型事件:当你使用事件捕获时,父级元素先触发,子级元素后触发
  • DOM事件流:同时支持两种事件模型:捕获型事件和冒泡型事件
  • 阻止冒泡:在w3c中,使用stopPropagation()方法;在IE下设置cance7Bubble =true
  • 阻止捕获:阻止事件的默认行为,例如click - <a>后的跳转。在w3c 中,使用preventDefault()方法,在IE下设置window.event.returnValue = false

8 new操作符具体干了什么呢?

  • 创建一个空对象,并且 this变量引用该对象,同时还继承了该函数的原型"
  • 属性和方法被加入到 this 引用的对象中
  • 新创建的对象由this所引用,并且最后隐式的返回this

9 Ajax原理

  • Ajax的原理简单来说是在用户和服务器之间加了一个中间层( AJAX引擎),通XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后用javascrip t来操作DOM而更新页面。使用户操作与服务器响应异步化。这其中最关键的一步就是从服务器获得请求数据
  • Ajax的过程只涉及JavaScript . XMLHttpRequest 和DOM,XMLHttpRequest是ajax的核心机制

优点:

  • 通过异步模式,提升了用户体验.
  • 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用.
  • Ajax在客户端运行,承担了一部分本来由服务器承担的工作,减少了大用户量下的服务器负载。
  • Ajax 可以实现动态不刷新(局部刷新)

·缺点:

  • 安全问题AJAX暴露了与服务器交互的细节
  • 对搜索引擎的支持比较弱。
  • 不容易调试。

10如何解决跨域问题?

首先了解下浏览器的同源策略同源策略 /SOP ( Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS CSFR等攻击。所谓同源是指**"协议+域名+端口"**三者相同,即便两个不同的域名指向同一个ip地址,也非同源

解决方案

相关推荐
掘金安东尼10 分钟前
用 WebGL + Solid.js 构建混合材质 Shader
前端·webgl
恋猫de小郭14 分钟前
Flutter 小技巧之有趣的 UI 骨架屏框架 skeletonizer
android·前端·flutter
江城开朗的豌豆15 分钟前
玩转React Hooks
前端·javascript·react.js
阿酷tony19 分钟前
教育场景下禁用html5播放器拖动进度条的例子
前端·html·html5·在线教育场景·禁止播放器拖动
前端小巷子41 分钟前
Vue3 响应式革命
前端·vue.js·面试
一狐九1 小时前
Flutter如何通过GlobalKey调用组件内的方法
前端·flutter
wyzqhhhh1 小时前
前端如何处理首屏优化问题
前端
杨荧1 小时前
基于Python的反诈知识科普平台 Python+Django+Vue.js
大数据·前端·vue.js·python·数据分析
22jimmy2 小时前
JavaWeb(二)CSS
java·开发语言·前端·css·入门·基础
m0_738120725 小时前
CTFshow系列——命令执行web38-40
前端·windows·安全·web安全