自己整理的js面试小题

1,什么是同步异步

        同步:在JavaScript中 同步就是先执行完上层代码 在执行下层代码一步一步执行

        异步:可以同时执行的代码

2,程序进程线程

        程序:功能

        进程:进程不是程序,是进程执行的过程

        线程:程序执行过程中开启的每个分支,多线程异步可以提高进程的效率

3,什么是Ajax

        Ajax是前后端数据交互的重要手段,使用Ajax可以 无刷新状态 更新页面,并且实现异步提交,极大提升了用户体验

     Ajax的优缺点

        1-不需要插件支持

        2-用户体验感强(无刷新状态更新页面)

        3-提升web程序的性能(传递数据可做到按需发送,不必整体提交)

4,箭头函数与普通函数的区别

        1-没有自己的this

        2-语法极简,当只传入一个参数时可省略小括号,只有一个返回值是可省略 { }

        3-不能被new执行

        4-不能使用Arguments

5,什么是伪数组

        1-不能使用数组的方法

        2-按照索引方式存储数据

        3-具有length属性

6,什么是闭包函数

        1-创建一个不会被销毁的作用域执行空间

        2-直接或间接返回一个函数

        3-外部有变量接收到返回的复杂数据

        4-返回的这个函数使用了外部函数的局部变量

        (闭包就是能够访问其他函数的局部变量的函数)

7,闭包的特点

        1-可以在函数外部控制内部的变量

        2-避免全部变量的命名污染

        3-延长了变量的生命周期

        4-存在不会被销毁的执行空间 (低版本会造成内存溢出)

8,set 和 map

        set 是无序无重复的值集合

               1. 所得元素的只有key没有value,value就是key

                2.不允许出现键值重复

                3.所有的元素都会被自动排序

        map 是无序无重复的值值对集合

               1.所有元素都是键+值存在

                2.不允许键重复

                3.所有元素是通过键进行自动排序的

                4.map的键是不能修改的,但是其键对应的值是可以修改的

9,new 的原理

        1-创建一个新对象

        2-改变函数内的this指向为这个新函数

        3-执行函数内的代码,并将新函数的_ _prototype_ _ 指向新函数的 prototype

        4-检查是否返回新函数,如果没有则返回这个新对象(this)

10,观察者模式(订阅者模式)

        定义了一种一对多的关系,多个观察者对象同时监听同一个主题对象,这个主体对象发生变化时会通知所有的观察者对象,使他们能够自动更新自己

11,this指向问题

        谁执行了this所在的函数 this就是谁

        1-默认绑定:没有明确的隶属对象,被直接调用时this 指向window ,严格模式下为 undefined 

        2-隐式绑定:有明确隶属对象,this指向该对象

        3-显示绑定:call,aplay,bind 强制绑定改变this指向 第一个参数改变this指向

        4-构造函数绑定:new绑定

                1-创建一个新对象

                2-改变函数内的this指向为这个新函数

                3-执行函数内的代码,并将新函数的_ _prototype_ _ 指向新函数的 prototype

                4-检查是否返回新函数,如果没有则返回这个新对象(this)

12,call,apply,bind 的区别

        第一个参数都是改变this的指向

        call 可以有多个参数,返回值以原函数的返回值为主

        apply 第二个参数只能是数组,自动解析作为参数

        bind 可以有多个参数,返回值是改变this指向后的新函数

        

13,什么是原型链

        对象从原型继承属性的过程

        现在自身查找,找不到去父级查找,依次向上,直到找到  或 为 null结束

14,原型对象

        原型是function 对象的一个属性 它定义了构造函数制作出的对象的公共祖先,通过改构造函数产生的对象,可以继承改原型的属性和方法 原型也是对象 ,所有的原型对象都是由 object构造函数创建出来的

15,原型

        原型是一个对象,是函数的一个属性 prototype,通过该函数实例化出来的对象都可以继承得到原型上所有的属性和方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 什么是闭包?举一个实际的例子。 答案:闭包是指一个函数能够访问并使用其外部环境中的变量和参数,即使外部函数已经返回并销毁了。例如,一个函数返回另一个函数,或者一个函数内部定义了另一个函数。 2. 什么是事件冒泡和事件捕获? 答案:事件冒泡是指当一个事件在 DOM 元素中触发时,它会从被点击的元素开始,一直向它的祖先元素进行事件传递。而事件捕获则是相反的,事件从祖先元素开始向下传递,最后到达被点击的元素。 3. 如何判断一个变量是否是数组? 答案:可以使用 Array.isArray() 方法,该方法返回一个布尔值,表示传递的参数是否是数组。 4. 如何遍历对象的属性? 答案:可以使用 for...in 循环来遍历对象的属性,例如: for (let key in obj) { console.log(key + ': ' + obj[key]); } 5. 什么是 AJAX?如何使用 AJAX 发送请求? 答案:AJAX(Asynchronous JavaScript and XML)是一种在无需刷新页面的情况下与服务器进行数据交互的技术。可以使用 XMLHttpRequest 对象来发送 AJAX 请求,例如: let xhr = new XMLHttpRequest(); xhr.open('GET', 'http://api.example.com/data'); xhr.onload = function() { console.log(xhr.responseText); }; xhr.send(); 6. 什么是解构赋值?如何使用解构赋值赋值数组和对象中的值? 答案:解构赋值是一种快速从数组和对象中提取值并赋值给变量的技术。可以使用数组的解构赋值语法,例如: let [x, y] = [1, 2]; console.log(x); // 1 console.log(y); // 2 也可以使用对象的解构赋值语法,例如: let { name, age } = { name: 'John', age: 30 }; console.log(name); // John console.log(age); // 30 7. 如何避免 JavaScript 编写时的类型错误? 答案:可以使用 TypeScript 这样的静态类型检查工具,或者使用 JavaScript 的严格模式('use strict')来强制执行更严格的类型检查。 8. 什么是事件委托?为什么使用事件委托? 答案:事件委托是利用事件冒泡的原理,在父元素上监听子元素的事件,在处理事件时通过判断事件的目标来确定是哪个子元素触发的事件。使用事件委托可以避免大量的事件处理程序,提高效率和性能。 9. 如何实现数组去重? 答案:可以使用 Set 数据结构或者数组的 filter() 方法来实现数组去重,例如: let arr = [1, 2, 2, 3, 3, 3]; let uniqueArr = Array.from(new Set(arr)); console.log(uniqueArr); // [1, 2, 3] 或者: let arr = [1, 2, 2, 3, 3, 3]; let uniqueArr = arr.filter((value, index, self) => { return self.indexOf(value) === index; }); console.log(uniqueArr); // [1, 2, 3] 10. 如何实现一个简单的 Promise? 答案:可以使用 Promise 构造函数和 resolve()、reject() 方法来创建和处理 Promise,例如: function myPromise() { return new Promise((resolve, reject) => { // 异步操作 if (/* 异步操作成功 */) { resolve(result); } else { reject(error); } }); } 然后可以使用 .then() 和 .catch() 方法来处理 Promise 的成功和失败结果,例如: myPromise() .then(result => console.log(result)) .catch(error => console.error(error));

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值