js
uneedcode
秃了不变强说不过去
展开
-
如何利用JS防抖实现搜索框优化
什么是JS的防抖?防抖指的是触发事件后在n秒内函数只执行一次,若在n秒内再次触发事件则重新计算,函数不会重复执行。在实际项目中我们可能会碰到搜索框会浪费大量的请求。比如我们有一个input,每次用户在搜索框输入的时候就触发onInput事件然后发送请求。以下代码是未优化前<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="vi原创 2020-06-08 23:33:16 · 2417 阅读 · 0 评论 -
前端面试官让你实现淘宝评分的效果
我们要实现的效果: <ul class="comment"> <li>☆</li> <li>☆</li> <li>☆</li> <li>☆</li> <li>☆</li> </ul>分析如下:1.鼠标移入,鼠标当前的li和左边的li是实心的,右边是空心的2.鼠标移出,原创 2020-06-07 18:29:12 · 401 阅读 · 0 评论 -
JS基础面试题02--预解析与作用域
面试本没有坑,要饭的人多了,也就有了坑。第一题function a(b){ console.log(b); var b =1;}a(100)执行结果为100。函数内部的var定义的变量会预解析提升到当前作用域的最顶端。所以预解析后如下:function a(b){ var b; console.log(b); b =1;}a(100)提升后b默认的值是undefined,但由于函数有接收一个形参b=100,所以打印时b的值已经是100了。第二题functi.原创 2020-06-06 17:51:33 · 491 阅读 · 0 评论 -
如何理解JS中的call、bind和apply
JS中的每个函数都包含两个非继承而来的方法:apply和call。这两个方法的用途都是在特定的作用域中调用函数。首先apply方法接收两个参数:一个是在其中运行函数的作用域this,另一个是参数数组。第二个参数可以是实例数组,也可以是arguments对象。call和apply的作用相同,区别只在于接收参数的方式不同。call的第一个参数跟apply一样,第二个参数开始不同。它不是一个数组,而是一个个单独参数,要逐个列举出来。bind的参数跟call一样,但是他返回的是一个全新的函数。需要再次调用。而原创 2020-06-05 22:01:31 · 140 阅读 · 0 评论 -
JS基础面试题01--预解析与作用域
下面是面试题var a = 123;function f1(){console.log(a);}function f2(){var a = 456;f1();}f2();console.log(a)输出结果为123,123。首先我们先看f2函数,里面定义了一个局部变量a还调用了f1。而f1执行后打印a。那这个a是全局的a还是局部的a呢?这就由函数的调用者决定了。而f1是一个全局函数,调用者是window,所以a自然是全局的a。结果为123。再看console.log(a),也就是原创 2020-06-04 23:31:29 · 258 阅读 · 0 评论 -
前端面试之ES6基础--let和const
ES6是什么?全称ECMAScript6,是新版本JS的语法规范。ES5定义变量是用到var。ES6新增了两个声明标识的关键字let和const。let和const的特点:1.不存在变量提升2.有严格的作用域–块级作用域3.同一个作用域下不能重复定义同一个名称下面我们结合代码来演示这三者的区别//变量提升console.log(a) ;console.log(b) ;console.log(c) var a = 'a';let b = 'b';const c = 'c';输出原创 2020-06-03 23:27:01 · 212 阅读 · 0 评论 -
React报错了怎么办
最近在学习react,遇到一个报错。代码如下class H1 extends Component { state = { num: 0, }; timer = 0; // 定时器在挂载时设置了,在卸载时应该销毁 // 如果实在render时设置了,在卸载时无法销毁 componentDidMount() { let { num } = this.state; this.timer = setInterval(() => { num++;原创 2020-05-29 21:16:02 · 205 阅读 · 0 评论 -
深拷贝方法大全,前端面试必备
js里面的深拷贝是针对引用数据类型才有的,对于基本数据类型则没有这种深拷贝与浅拷贝之分。因为基本数据类型是名和值都存储在栈内存里,而引用数据类型是名存储在栈内存,他的值则指向堆内存空间。let arr1 = [1,2,3,4]let arr2 = arr1这里会将arr2和arr1共用一个堆内存指向,所以不管之后对两个数组如何操作都是作用在同一个堆。这种也是我们所说的浅拷贝那么如何对一...原创 2020-04-12 22:40:41 · 310 阅读 · 0 评论