js
weixin_48992836
这个作者很懒,什么都没留下…
展开
-
什么是闭包
闭包:定义 当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数的内部变量,且返回的那个函数在外部被执行,就产生了闭包.闭包是一个环境,具体指的就是外部函数–高阶函数 closure闭包的三个特性1:函数套函数2:内部函数可以直接访问外部函数的内部变量或参数3:变量或参数不会被垃圾回收机制回收 GC闭包的优点:1:变量长期驻扎在内存中2:避免全局变量的污染3:私有成员的存在闭包的缺点常驻内存 增大内存的使用量 使用不当会造成内存的泄露....原创 2021-05-30 21:25:06 · 51 阅读 · 0 评论 -
var let const 区别
如果使用关键字 var 声明一个变量,那么这个变量就属于当前的函数作用域,如果声明是发生在任何函数外的顶层声明,那么这个变量就属于全局作用域。举例说明:var a = 1; //此处声明的变量a为全局变量function foo(){ var a = 2;//此处声明的变量a为函数foo的局部变量 console.log(a);//2}foo();console.log(a);//1let声明变量有以下几个特点:1.没有预解析过程(即没有变量提升,var有变量提升)2.不可以重原创 2021-05-30 21:21:33 · 86 阅读 · 0 评论 -
作用域、作用域链、自由变量、变量提升
1.作用域链?只要是代码都在一个作用域中,写在函数内部的局部作用域,未写在任何函数内部即在全局作用域中;如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域;根据在内部函数可以访问外部函数变量的这种机制,用链式查找决定哪些数据能被内部函数访问,就称作作用域链。2.作用域?作用域 就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性更重要的是减少命名冲突作用域(es6)之前:全局作用域 局部作用域3.自由变量自由变量的概念: 当前作用域没有定义的变量4.变量提升va原创 2021-05-27 21:32:07 · 45 阅读 · 0 评论 -
call/apply/bind的区别
1.改变this指向的的方法 1.caal跟apply跟bind都可以改变this指向 2.call后面是用于一个一个数据数据下使用 3.aply用于后面是数组的情况下 4.bind是修改this指向但是还得调用一下1.call 用于后面是一个一个数据的情况下function f(){console.log(arguments)Array.prototype.push.call(arguments,100)}f(1,5,6)2.apply用于后面是数组的情况下fu原创 2021-05-27 21:09:19 · 53 阅读 · 0 评论 -
this关键字(指向)
一、this指向分为1.在浏览器里,在全局范围内this指向的是window对象 var aa = 10 console.log(this) //Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, parent: Window, …}2.在函数中,this永远指向最后调用他的对象 function aas(){ var bb = 20 console.log(this) }原创 2021-05-26 21:45:52 · 91 阅读 · 0 评论 -
原型和原型链
1.原型有哪些?1.每个函数都有一个prototype属性,被称为显示原型function aa(){ } console.log(aa.prototype) //2.每个实例对象都会有_ _proto_ _属性,其被称为隐式原型 let a = {} console.log(a)原创 2021-05-26 21:02:48 · 53 阅读 · 0 评论 -
es4----es6数组方法
1.数组方法数组元素的排序:sort()语法格式:数组名.sort();sort()方法可以没有参数使用:将数组中所有的元素都看作字符型数据来进行排序。var num=[10,5,4,0,29,91,52,73,1];console.log(num);num.sort(function(a,b){ return a-b; }) //将num数组的元素按照数值关系升序排列 console.log(num); //[0,1,4,5,10,29,52,73,9原创 2021-05-25 21:49:18 · 98 阅读 · 0 评论 -
Js中arguments
在Javascript中,arguments是对象的一个特殊属性,arguments对象就像是数组,但是它却不是数组,它被Javascript称为伪数组,虽然长得像数组但是他不具备数组中的方法,但是它有长度,索引值,如果我们想要让它使用数组方法我们可以通过var argsArr = Array.prototype.slice.call(arguments);...原创 2021-05-25 20:39:58 · 46 阅读 · 0 评论 -
数据类型判断
typeof 对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用instanceof 判断 new 关键字创建的引用数据类型不考虑 null 和 undefined(这两个比较特殊)以对象字面量创建的基本数据类型constructor 似乎完全可以应对基本数据类型和引用数据类型 但如果声明了一个构造函数,并且把他的原型指向了 Array 的原型,所以这种情况下,constructor 也显得力不从心Object.prototype.toStri..原创 2021-05-24 21:46:50 · 50 阅读 · 0 评论 -
手写深拷贝
一、先认识什么是相等或者不等定义是:我们要二个变量、初始值相等的话,就要通深拷贝 //如果需要两个变量,如果他们的初始值相同那么 let arr = [1,2,3,4,[5,6]] //j let list = [...arr] //l console.log(list) console.log(arr) console.log(arr === list) console.log(arr[1]===list[1]) 第一种方法原创 2021-05-24 21:45:43 · 55 阅读 · 0 评论