JS面试题汇总(十)

news/2024/7/19 16:40:23 标签: javascript, 前端, 面试, js, es6

📒博客首页:酸狗的博客🍋
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
💖热爱前端学习,期待一起交流!✨
🙏作者水平很有限,如果发现错误,求告知,多谢!🌈
😎有问题可私信我交流🙄

🧲往期点这里:↓⚡
JS面试题汇总(一)
JS面试题汇总(二)
JS面试题汇总(三)
JS面试题汇总(四)
JS面试题汇总(五)
JS面试题汇总(六)
JS面试题汇总(七)
JS面试题汇总(八)
JS面试题汇总(九)

✨91. 简单介绍下 JS 的原型和原型链

参考答案:
🤐看第93题
👓参考

✨92. 说说你对作用域链的理解

参考答案:

作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到 window 对象即被终止,作用域链向下访问变量是不被允许的。

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

参考答案:

  • 原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链。

  • 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链。

  • JavaScript 的数据对象有那些属性值?

    writable:这个属性的值是否可以改。
       configurable:这个属性的配置是否可以删除,修改。
       enumerable:这个属性是否能在 for…in 循环中遍历出来或在 Object. keys 中列举出来。
       value:属性值。

  • 当我们需要一个属性的时,Javascript 引擎会先看当前对象中是否有这个属性, 如果没有的话,就会查找他的 Prototype 对象是否有这个属性。

js">function clone(proto) {
    function Dummy() {}
    Dummy.prototype = proto;
    Dummy.prototype.constructor = Dummy;
    return new Dummy(); //等价于Object.create(Person);
}

function object(old) {
    function F() {}
    F.prototype = old;
    return new F();
}
var newObj = object(oldObject);

✨94. 请解释什么是事件代理

参考答案:

事件委托本质上是利用了浏览器事件冒泡的机制。因为事件在冒泡过程中会上传到父节点,并且父节点可以通过事件对象获取到
目标节点,因此可以把子节点的监听函数定义在父节点上,由父节点的监听函数统一处理多个子元素的事件,这种方式称为事件代理。

使用事件代理我们可以不必要为每一个子元素都绑定一个监听事件,这样减少了内存上的消耗。并且使用事件代理我们还可以实现事件的动态绑定,比如说新增了一个子节点,我们并不需要单独地为它添加一个监听事件,它所发生的事件会交给父元素中的监听函数来处理。
👓参考

✨95. offsetWidth/offsetHeight, clientWidth/clientHeight 与 scrollWidth/scrollHeight 的区别

参考答案:

javascript">offsetWidth / offsetHeight 返回值包含content + padding + border,效果与 e.getBoundingClientRect()相同

clientWidth / clientHeight 返回值只包含content + padding,如果有滚动条,也不包含滚动条

scrollWidth / scrollHeight 返回值包含content + padding + 溢出内容的尺⼨

✨96. 谈谈你对 AMD、CMD 的理解

参考答案:

  • CommonJS 是服务器端模块的规范, Node.js 采⽤了这个规范。
  • CommonJS 规范加载模 块是同步的,也就是说,只有加载完成,才能执⾏后⾯的操作。AMD 规范则是⾮同步加载 模块,允许指定回调函数
    AMD 推荐的⻛格通过返回⼀个对象做为模块对象, CommonJS 的⻛格通过对module.exportsexports 的属性赋值来达到暴露模块对象的⽬的

es6模块 CommonJS、AMD、CMD

  • CommonJS 的规范中,每个 JavaScript ⽂件就是⼀个独⽴的模块上下⽂( module context ),在这个上下⽂中默认创建的属性都是私有的。也就是说,在⼀个⽂件定义的 变量(还包括函数和类),都是私有的,对其他⽂件是不可⻅的
  • CommonJS 是同步加载模块,在浏览器中会出现堵塞情况,所以不适⽤
  • AMD 异步,需要定义回调 define ⽅式
  • es6 ⼀个模块就是⼀个独⽴的⽂件,该⽂件内部的所有变量,外部⽆法获取。如果你希 望外部能够读取模块内部的某个变量,就必须使⽤ export 关键字输出该变量 es6 还可以导出类、⽅法,⾃动适⽤严格模式

✨97. web 开发中会话跟踪的方法有哪些

参考答案:

会话跟踪就是浏览器和服务器通信

1、cookie

2、session

3、隐藏input

4、url重写

5、ip地址

✨98. 说几条写 JavaScript 的基本规范?

参考答案:

1、不要在同一行声明多个变量

2、使用===或!==来比较

3、使用字面量的方式来创建对象、数组,替代new Array这种形式

4、不要使用全局函数

5、switch语句必须要带default分支

6、函数不应该有的时候有return,有的时候没有return

7、fon-in循环中的变量,用var关键字说明作用域,防止变量污染

8、变量的声明遵循驼峰命名法,用let替代val,声明构造函数时首字母大写,定义常量的时候尽量用大写字母,用_分割

9、三元表达式可以替代if语句

10、&&和||是可以短路的,使用&&时如果前面一个值是错的,那么后面的值不用判断,使用||时,如果前面一个值是对的,那么后面的值不用判断

11、比较数据类型以下6中情况是false,其他都是true------false、""、0、null、undefined、NaN

12、数据类型检测用typeof,对象类型检测用instanceof

13、异步加载第三方的内容

14、单行注释//,多行注释/**/

15、使用命名空间解决变量名冲突

16、多人协作开发,新建一个js文件,const声明常量,在js文件中引用,用常量名替代方法名,这样做可以防止命名冲突

✨99. JavaScript 有几种类型的值?你能画一下他们的内存图吗?

参考答案:

数据类型是所有程序都会涉及到的,是计算机语言比较基础知识,这种问题被问到的可能性其实并不大,这样的题目只要花点时间把它记下来就好了,难易程度一般。

两大类:

栈:原始数据类型(Undefined,Null,Boolean,Number、String)

堆:引用数据类型(对象、数组和函数)

区别:

两种类型的区别是:存储位置不同;

原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;

引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其

在栈中的地址,取得地址后从堆中获得实体
在这里插入图片描述

✨100. eval 是做什么的?

参考答案:

1. 它的功能是把对应的字符串解析成 JS 代码并运行
2. 应该避免使用 eval,不安全,非常耗性能(2 次,一次解析成 js 语句,一次执行)


http://www.niftyadmin.cn/n/805833.html

相关文章

BMP位图文件结构及平滑缩放 (转)

BMP位图文件结构及平滑缩放 (转)[more]BMP位图文件结构及平滑缩放 西安交通大学流体机械研究所张义云 ---- 用普通方法显示BMP位图,占内存大,速度慢,在图形缩小时,失真严重,在低颜色位数的设备上显示高颜色位数的图形图形时失真大…

axios七大特点

📒博客首页:酸狗的博客🍋 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 💖热爱前端学习,期待一起交流!✨ 🙏作者水平很有限,如果发现错误&#x…

【Redis实现系列】RedisClient实现

RedisClient Redis服务器是典型的一对多服务器程序 一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。 通过使用由I/O多路复用技术实现的文…

在C++ Builder中使用ActiveX控件显示Flash动画 (转)

在C Builder中使用ActiveX控件显示Flash动画 (转)[more]在C Builder中使用ActiveX控件显示Flash动画 在微软的大力扶持下,越来越多的软件公司开始支持ActiveX了,这对于喜欢编程的朋友来说可是件值得高兴的事!因为我们可以在程序中很方便地调…

java 编码乱码 判断是否是乱码工具类

import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 判断字符串是否乱码 * param strName * return boolean */ public static boolean isMessyCode(String strName) { Pattern p Pattern.compile("\\s*|\t*|\r*|\n*"); Matcher m p.matc…

Vuex面试题汇总

📒博客首页:酸狗的博客🍋 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 💖热爱前端学习,期待一起交流!✨ 🙏作者水平很有限,如果发现错误&#x…

GNOME 1.4 Beta 1发布 (转)

GNOME 1.4 Beta 1发布 (转)[more]今天,GNOME小组终于发布了万众期待的GNOME 1.4 Beta 1。由于这是GNOME 1.4的第一个测试版,在安装和使用过程中难免存在很多问题,如果你是GNOME的忠实拥护者,GNOME小组希望你能够帮助测试GNOME 1.4…

html js POST提交跳转页面

/*** 采用post方式跳转* param URL* param PARAMS json格式数据 {html :prnhtml,cm1:测试,cm2:haha}* returns {Element}*/ function post(URL, PARAMS) {var temp document.createElement("form");temp.action URL;temp.method "post";temp.style.disp…