JS
Lmq!
这个作者很懒,什么都没留下…
展开
-
JS:选择排序
原理: 在待排序的数列中寻找最大(或者最小)的数字 放在整个序列的起始位置 然后再升序的待排序的数列中继续找最大(最小)放在已排序序列的末尾 以次类推 知道整个数列有序为止 let arr=[12,8,24,16,1] function choice(arr) { //用于交换位置 临时保存数字 let temp = null //保存数字在数组中的位置索引 let min = null ...原创 2022-05-17 10:59:18 · 138 阅读 · 0 评论 -
JS:插入排序
let arr = [2, 1, 5, 4, 8, 6]; function insert(arr) { //定义一个新数组,用来存储抓在手里的牌,开始先抓一张牌进来。 let handle = []; handle.push(arr[0]); //将原数组的第一项放进来,当做是手里的牌 //从第二项开始依次抓牌,一直把台面上的牌抓光 for (let i = 1; i < arr.length; i++) { //A是新抓的牌...原创 2022-05-16 10:28:31 · 243 阅读 · 0 评论 -
JS:冒泡排序
/** 冒泡排序思想* 小的泡在下面 大的泡在上面* 让数组中当前项和后一项进行比较 如果前一项比后一项大,则两项交换位置(让大的靠后)即可*/let arr =[12,8,24,16,1]//实现冒泡排序function Bubble(arr) { let temp = null //外城循环 控制比较的轮数 for (let i = 0; i < arr.length -1; i++) { //里层循环控制每一轮比较的次数...原创 2022-05-13 09:56:34 · 289 阅读 · 0 评论 -
JS:快速排序
// 交换数组中两个元素function swap(arr,i,j) { let temp = arr[i] arr[i] = arr[j] arr[j] = temp}//快速排序(使用递归)/** 思想:先找整个数组的中间项* 把它从原来数组中移除* 获取这一项结果* 准备左右两个数组* 拿出其他的每一项与中间项进行对比 比它小的放左边 比它大的放右边* *//** 递归* 函数自己调用自己* .原创 2022-05-12 14:44:41 · 761 阅读 · 0 评论 -
防抖与节流
1.防抖:防抖是指在事件触发n秒后再执行回调,如果在n秒内再次被触发,则重新计算时间。(就是在触发某个事件后,在下一次触发之前,中间的间隔时间如果超过设置的时间才会发送请求,一直触发就不会发送请求)前面的所有的触发都被取消,最后一次执行在规定的时间之后才会触发,也就是说连续快速的触发 只会执行一次。通过setTimeout的方式限制函数的执行次数,在一定的时间间隔内,将多次触发变成一次触发<!DOCTYPE html><html lang="en"><head原创 2022-05-12 10:18:11 · 127 阅读 · 0 评论 -
JavaScript创建对象方式
1.Object构造函数模式套路:先创建空Object对象,在动态添加属性/方法适用场景:起始时不确定对象内部数据问题:语句太多2. 对象字面量模式套路:使用{}创建对象,同时指定属性/方法适用场景:起始时对象内部数据是确定的问题:如果创建多个对象,有重复代码3.工厂模式套路:通过工厂函数动态创建对象并返回适用场景:需要创建多个对象问题:对象没有一个具体的类型,都是Object类型4.自定义构造函数模式套路:自定义构造函数,通过new创建对象原创 2022-04-06 17:00:31 · 82 阅读 · 0 评论 -
JavaScript如何实现继承(六种方式)
大多OO语言都支持两种继承方式: 接口继承和实现继承 ,而ECMAScript中无法实现接口继承,ECMAScript只支持实现继承,而且其实现继承主要是依靠 原型链 来实现。1.原型链基本思想:利用原型让一个引用类型继承另外一个引用类型的属性和方法。构造函数,原型,实例之间的关系:每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。原型链实现继承例子:function SuperType() {this.property = t原创 2022-04-06 15:17:34 · 2076 阅读 · 0 评论 -
Javascript 中 callee 和 caller
1.arguments.callee返回正在执行的函数本身的引用,是arguments的一个属性。当函数的名称未知时,例如匿名函数,使用callee很有用用来代替函数名,降低耦合性注:这个属性只有在函数执行时才有效它有一个length属性,可以用来获得形参的个数,因此可以用来比较形参和实参个数是否一致,即比较arguments.length是否等于arguments.callee.length它可以用来递归匿名函数。2.Function.caller返回调用指定函数的函原创 2022-03-29 15:40:22 · 1080 阅读 · 0 评论 -
arguments对象
1.在函数调用的时候,浏览器每次都会传递进两个隐式参数函数的上下文对象this封装实参的对象arguments2.arguments 对象arguments 对象实际上是所在函数的一个内置类数组对象每个函数都有一个arguments属性,表示函数的实参集合,这里的实参是重点,就是执行函数时实际传入的参数的集合。arguments不是数组而是一个对象,但它和数组很相似,所以通常称为类数组对象,以后看到类数组其实就表示arguments。arguments对象不能显式的创建,它只有在函数开始原创 2022-03-29 15:29:51 · 417 阅读 · 0 评论 -
null、undefined、NaN
1.undefined类型Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined。var message;alert(message == undefined); //true引入这个值的目的是为了正式区分空对象指针(null)与未经初始化的变量。不过,包含undefined值的变量和尚未定义的变量还是不一样的。var message;//这个变量声明后默认取得了undefined值//下面原创 2022-03-29 14:10:48 · 532 阅读 · 0 评论 -
原型与原型链
PrototypeJS中的对象有一个特殊的Prototype内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时Prototype属性都会被赋予一个非空的值。Prototype引用有什么用呢?当你试图引用对象的属性时会触发Get操作,如果无法在对象本身找到需要的属性,就会继续访问对象的Prototype链,这个过程会持续到找到匹配的属性名或者查找完整条[[Prototype]]链。如果是后者的话,[[Get]]操作的返回值是undefined。使用for..in遍历对象时原理和查找[原创 2022-03-21 15:17:47 · 556 阅读 · 0 评论 -
函数作用域、块作用域
在ES5中,只有全局作用域和局部作用域。ES6因为let,const的引入而有了块作用域。函数作用域属于这个函数的全部变量都可以在整个函数的范围内使用及复用(在嵌套的作用域中也可以使用)隐藏内部实现可以把变量和函数包裹在一个函数的作用域中,然后用这个作用域来“隐藏”它们为什么"隐藏"变量和函数是一个有用的技术?有很多原因促成了这种基于作用域的隐藏方法。他们大都是从最小特权原则(最小暴露原则)中引申出来的。最小特权原则:在软件设计中,应该最小限度的暴露必要内容,而将其他内容都“隐藏原创 2022-03-16 17:34:16 · 275 阅读 · 0 评论 -
JS:this
一、this到底是什么?this是一个特别的关键字,被自动定义在所有函数的作用域中。this是在运行时进行绑定的,并不是在编写时绑定,他的上下文取决于函数调用时的各种条件。this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式。当一个函数被调用时,会创建一个活动记录(执行上下文)。这个记录会包含函数在哪里被调用(调用栈)、函数的调用方式、传入的参数等信息。this就是这个记录的一个属性,会在函数执行的过程中用到。this实际上是在函数被调用时发生的绑定,他指向什么完全取决于函数在原创 2022-03-16 15:36:26 · 94 阅读 · 0 评论