js高频率面试题

一.简述js闭包理解及其优缺点,并用闭包方式实现
1.什么是js闭包
js允许使用内部函数,内部函数可以访问他们所在的外部函数中声明的变量,参数和声明的其他内部函数。当其中一个这样的内部函数在包含他们的外部函数之外被调用时,就会形成闭包。
闭包的好处:
(1)不增加额外的全局变量
(2)执行过程中所有的变量都是在匿名函数内部
闭包的缺点
(1)由于闭包会使得函数中的变量被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在ie中可能导致内存泄漏。解决方法是,在退出函数之前,将不使用的局部变量删除。
(2)闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把
父函数当做对象object使用,把闭包当作他的公用方法,把内部变量当作他的私有属性,这时一定要小心,不要随便改变父函数内部变量的值。

二谈谈this对象的理解
1.this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。
2.但是有一个总原则,那就是this指的是调用函数的那个对象
3 this一般情况下:是全局对象Flobal。作为方法调用,那么this就是值这个对象
三说说你对作用域链的理解
作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变量是不允许的

四. document load 和 document ready的区别
页面加载完成有两种事件
1.load是当前页面所有资源全部加载完成后(包括DOM文档树,css文件,js文件)
问题:如果图片资源较多,加载时间较长,onload后等待执行的函数需要等待
2. $(document).ready() 是当DOM 文档加载完成后执行一个函数 在原生js中不包括ready()这个方法,只有load方法就是onload事件

五.请用js去除字符串空格
方法一:replace 正则匹配方法
去除字符串内所有空格:str = str.replace(/\s*/g,"");
去除字符串内两头空格:str = str.replace(/^\s*/s*$/g,"");
去除字符串内左侧空格:str = str.replace(/^\s*/,"");
去除字符串内右侧空格:str = str.replace(/(\s* $)/g,"");
方法二 str.trim()方法

var str ="6  6";
var str_1 = str.trim();
console.log(str_1)

方法三 jq方法 $.trim(str)

var str ="6  6";
var str_1 = $.trim(str);
console.log(str_1)

六 js是一门怎样的语言,他有什么特点
1 脚本语言。js是一种解释型的脚本语言,c,c++等语言先编译后执行,而js是在程序运行过程中逐行进行解释。
2.基于对象。js是一种 基于对象的脚本语言,他不仅可以创建对象,也能使用现有对象
3 简单。js语言采用的是弱类型的变量类型,对使用的数据类型未作出严格的要求,是基于java基本语句和控制的脚本语言,其设计简单紧凑
4 动态性。js是一种采用事件驱动的脚本语言,他不需要经过web服务器就可以对用户的输入作出响应
5 跨平台。 js脚本语言不依赖于操作系统,仅需要浏览器的支持

七 怎样添加 移除 移动 复制 创建 和查找节点
1.创建节点
createDocumentFragment() 创建一个DOM片段
createElement() 创建一个具体的元素
createTextNode() 创建一个文本节点
2 添加 移除 替换 插入
appendChild() 添加
removeChild 移除
replaceChild 替换
insertBefore 插入
3 查找
getElementsByTagName() 通过标签名称
getElementByName() 通过元素的name 属性的值
getElementById 通过元素id 唯一性

八require和import区别
两者的加载方式不同 ,规范不同
1 两者的记载方式不同,require是在运行时加载 而import是在编译时加载
require(’./a’)(); a模块是一个函数,立即执行a模块函数
var data=require(’./a’)[0] a模块导出的是一个数组
2 规范不同,require是CommonJS/AMD规范 import是ESMAScript6+规范
3 require 特点:社区方案,提供了服务器的模块加载方案。非语言层面的标准。只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化
import特点:语言规范层面支持模块功能。支持编译时静态分析,便于JS引入宏和类型检验。动态绑定

九 移动端的点击事件延迟是多久 为什么会有 怎么解决这个延迟
1。300ms
2 因为浏览器捕获第一次单机后,会先等待一段时间,如果在这段时间区间里用户为进行下一次点击,则浏览器会做单击事件的处理。如果这段时间里用户进行了第二次单击操作,则浏览器会做双击事件处理
3推荐使用 fastclick.js

十 使用构造函数的注意点
1 一般情况下构造函数的首字母需要大写,因为我们在看到一个函数的首字母大写的情况 就认定这是一个构造函数,需要跟new关键字进行搭配使用 创建一个新的实例(对象)
2.构造函数在被调用的时候需要跟new关键字搭配使用
3 在构造函数内部使用this +属性名的形式为实例添加一些属性和方法
4 构造函数一般不需要返回值,如果有返回值
1.4.1 如果返回值是一个基本数据类型,那么调用构造函数 返回值仍旧是那么创建出来的对象
2 4.2 如果返回值是一个复杂数据类型 那么调用的构造函数的时候 返回值就是这个return 之后的那个复杂数据类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值