
JavaScript基础
文章平均质量分 61
Chailo.
这个作者很懒,什么都没留下…
展开
-
【ES6】关于Proxy和Reflect
好久没有写博客啦,两个月干嘛了呢。琢磨了一下手撕promise,没琢磨通,通了的也快忘记了。实习啦啦啦啦~学到了好多,查漏补缺。最近可以自己看看Proxy和Reflect。有空了捋捋,写写自己的理解。先占个坑。...原创 2022-01-26 11:24:22 · 832 阅读 · 0 评论 -
【JS基础整理—No.08】原型--原型链--原型继承
关于原型的概念,一开始的接触js的时候完全不知所云,一堆专业名词的解释,箭头指来指去越看越晕。当时我只知道这个东西很重要很重要,然后就是好难好难。但是不要担心,其实很简单的!相信我!现在绕不明白只是因为它对于你来说是一个完全陌生的概念,而且缺少实际的用用场景。只要我们一直在学习,时间会帮我们解决一切问题的。原创 2021-12-08 21:12:23 · 662 阅读 · 0 评论 -
关于a++与++a?一篇文章搞懂自增运算符
a++与++a从入门学C就开始困扰我,学了忘忘了又学。关键是当时并没有理解透彻。最近在学习闭包的知识点时又遇到了这个问题,索性整理一遍,一次彻底搞定自增运算符。原创 2021-08-29 20:12:58 · 1325 阅读 · 0 评论 -
【JS基础整理—No.07】函数柯里化
柯里化的官方解释:把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数。原创 2021-11-22 21:21:10 · 1224 阅读 · 1 评论 -
【面试题集—No.11】如何复制一个数组
写在前面:面试问到的话,需要尽可能多的把你在可以想到的方法答出来。在平时的算法练习中,拷贝数组是其中一个出现很频繁并且很重要的一步。这一章很轻松的~ 另外复习完这一部分,我接下来去整理一下常见的数组的API。首先,大家一定知道!但我在啰嗦一句,显得我这个 菜方方面面!var arr=["teery","larry","tom","jacky"];var arr1=arr; //不是克隆arr1==arr //true,指向同一个对象另外,这里是简单的针对数组的浅拷贝,关于拷..原创 2021-11-19 23:14:41 · 176 阅读 · 0 评论 -
【面试题集—No.10】 闭包面试题
写在前面:在学习了闭包之后,试着做做这些题。其实是一种很棒地检验自己学习成果的手段。我当时反反复复,学了但好像又没完全学,遇到题还是一头雾水,到现在可以捋得很清楚也经历了蛮久的。而且从this,执行上下文,作用域一直走过来,这些题目涉及的内容也相对全面,加油喽。原创 2021-11-19 22:04:04 · 769 阅读 · 0 评论 -
【JS基础整理—No.06】闭包
写在前面:我试图用执行上下文和作用域这些底层原理来对闭包这个概念进行理解,所以我先复习了,执行上下文,又搞清楚了作用域是怎么一回事,最后再回来解释一波闭包。其实闭包这个概念,在刚开始学习前端随便翻面经的时候我就见过它,三个月前也认真地学习过,做了好些代码阅读题,知道了它是“内部函数引用外部函数的变量使常驻内存”,但其实也只是停留在概念上。后来慢慢地这个地方用到了闭包,那个原来也有闭包,对他的理解不是浮在表面,再到现在去想要理解它的底层实现原理。好像一直在学习又好像什么新的内容都没有原创 2021-11-19 15:32:11 · 617 阅读 · 0 评论 -
【JS基础整理—No.05】执行上下文和作用域区别
????【JS基础整理—No.03】执行上下文_Chailo的博客-优快云博客????【JS基础整理—No.04】作用域_Chailo的博客-优快云博客区别: 除全局作用域,每个函数有自己的作用域,在函数定义时确定。(只有一个) 全局执行上下文环境是在全局作用域确定之后,js代码马上执行之前创建; 函数执行上下文环境是在调用函数时,函数代码执行之前创建的。(有多个) 作用域是静态的,函数定义时确定好就一直存在且不变; 上下文环境是动态的,调用函数时创建,结束时释放。 联系:原创 2021-11-16 19:59:16 · 316 阅读 · 0 评论 -
【JS基础整理—No.04】作用域
写在前面:执行上下文创建阶段,其中一个过程是,创建作用域,接下来就简单谈谈我对作用域的理解。目录一、基本概念二、词法作用域三、块级作用域???? 最后整理的面试题一、基本概念定义:程序中定义变量的区域,它决定了当前执行代码对变量的访问权限。产生:代码定义的时候作用域链:当前作用域没有到上层作用域查找作用域包括:全局作用域,局部作用域(即,函数作用域,块级作用域) ❗没有对象作用域//注意和闭包区分????function fun(){ var n原创 2021-11-16 19:54:30 · 416 阅读 · 0 评论 -
【JS基础整理—No.01】 内存管理(垃圾回收、内存泄漏、弱引用)
内存管理是指在声明一个变量时,我们为它分配一块内存空间,当不在需要时,将这块内存释放。在JS中开发者不需要手动进行内存管理,JS引擎会自动进行内存管理。一、内存分配当我声明变量时,我们要根据变量的数据类型进行内存分配。数据类型分为基本数据类型和引用数据类型。????下面是一个简单的区别图解基本类型:系统会为分配一块内存(栈),这块内存中保存的就是变量的内容。【String,Number,Boolean,Null,Undefined,Symbol】引用类型:其存储的只是一个地址而已..原创 2021-11-05 10:07:25 · 228 阅读 · 0 评论 -
【JS基础整理—No.03】执行上下文
写在前面:对于初学者,全局执行上下文,全局作用域,函数执行上下文,函数作用域,这几个很容易混。关于执行上下文|作用域|闭包|变量提升|块级作用域这些内容有着很强的关联性,所以我把它们放在一起来复习整理。但一时间有不知该从哪里入手去解释,最近翻看了一些前辈的文章有了大概的思路。思维导图:先把涉及的所有知识点罗列出来,再根据知识点的范围与联系进行分类,梳理出一张思维导图,最后对细节内容分篇整理总结。可以根据目录单独食用接下来我会从执行上下文开始,理解执行上下文和执行栈原创 2021-11-16 15:24:50 · 463 阅读 · 0 评论 -
【面试题集—No.09】关于函数this的面试题
???? 面试题基础版// ???? 面试题1var a=1;function test(){ var a=2; function bar(){ var a=3; console.log(this.a); //global Undefined } bar();}test(); //Undefined 应该是1吧// 疑问❓:浏览器运行是1,node运行时undefined// ∵this的取值跟调用方式有关,bar()的调用方式,函数名前没'.',指向全局变量。//原创 2021-11-16 14:45:06 · 431 阅读 · 0 评论 -
【JS基础整理—No.02】函数
是对象,是一个引用数据类型1.函数的本质首先我们知道函数是引用类型数据,使用函数是为了提高代码的复用性从本质上讲,函数是一种特殊对象(数组也是一种特殊的对象),函数内部数据私有。????这部分关于原型的问题先不细说,总之理解函数的本质是对象即可。prototype:每个函数都有一个prototype属性,默认指向一个空对象(原型对象)给原型对象添加属性(一般添加方法)作用:函数的所有实例对象自动拥有原型中的属性(方法)__proto__: 每个实例对象都有一个__proto__原创 2021-11-16 14:41:57 · 800 阅读 · 0 评论 -
【手写代码】Object.assign() 原理及实现
????【手写代码】Object.create() 原理及实现原创 2021-11-15 14:48:59 · 824 阅读 · 0 评论 -
【手写代码】new 操作符
作用:创建一个用户定义的实例对象或具有构造函数的内置对象的实例实现步骤:(1)创建了一个空对象(2)设置原型,将对象的__ proto__属性指向构造函数的prototype属性(3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)(4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。手写代码:function objectFactory() { // 准备:从参数列表中获取构造函数 ...原创 2021-11-09 15:00:19 · 761 阅读 · 0 评论 -
【手写代码】instanceof 运算符
作用:用于判断构造函数的 prototype 属性是否出现在对象的原型链中实现步骤:1.获取对象的原型对象(隐式)2.获取构造函数的原型对象(显式)3. 判断构造函数的原型对象是否在对象的原型链上手写代码://关键点;① 3个步骤,② getPrototype()function myInstanceof(left,right){ // 1.获取对象的原型对象(隐式) let proto = Object.getPrototypeOf(left) ..原创 2021-11-09 12:03:08 · 120 阅读 · 0 评论 -
【手写代码】Object.create() 原理及实现
作用:创建一个新对象,使用现有的对象作为新创建的对象的隐式原型对象 __ proto__let people = { myName: 'chailo', age: 12, sex: 'female'}let me = Object.create(people)for(key in me){ console.log(key+':'+me[key])}// 输出:// myName:chailo// age:12// sex:female实现原理:...原创 2021-11-09 11:43:58 · 871 阅读 · 0 评论 -
【面试题集—No.04】for...in和for...of的区别
????写在前面:之前在????获取对象属性的个数一篇提到了几个常用的Object的API,这里区别一下for...in和for...of,迷迷瞪瞪的,我经常给搞混。1.for...in 遍历 key(原理:Object.keys());for...of 遍历value2.for...in 获取自身和继承的可枚举属性(配合hasOwnProperty(),判断是否是自身属性) ;for...of 获取自身可迭代属性的值3.for...in用来遍历对象,不建议遍历数组(∵输出的顺序是不固定的);原创 2021-11-07 17:39:51 · 317 阅读 · 0 评论 -
【面试题集—No.03】获取对象属性的个数
在解决这个问题之前,我们需要知道对象的属性分为:自身属性和继承属性;可枚举属性和不可枚举属性;以symbol为属性值的属性。使用不同的API获得的属性不同。与对象属性相关的APIhasOwnproperty() 判断是否是自身属性 【返回 布尔值】Object.keys() 获取自身可枚举属性 【返回 数组】Object.getOwnPropertyNames() 获取自身可枚举和不可枚举属性【返回 数组】for...in 获取自身和继承的可枚举属性( 除去s...原创 2021-11-07 17:21:35 · 546 阅读 · 0 评论 -
【手写代码】深拷贝和浅拷贝
一、定义拷贝:就是赋值,把一个变量赋值给另一个变量,对变量的内容进行拷贝。了解深拷贝和浅拷贝之前需要对基本数据类型和引用数据类型的内存上存储(栈/堆)的区别有清楚地认识,深拷贝和浅拷贝是针对于引用数据类型。浅拷贝:拷贝后的数据会影响原数据深拷贝:产生了新的数据,而不是对原数据的引用判断依据:数据存放是对象在栈内存地址的引用还是对象的引用二、举例????1. 最简单的浅拷贝//地址的拷贝,不产生新的数据var arr = [1,2,4];Var new_arr = a原创 2021-11-02 14:21:58 · 831 阅读 · 0 评论 -
【面试题集—No.01】0.1+0.2 != 0.3
一、背景原理:因为计算机是采用二进制来存储的,现实中的数在存入计算机需转换为二进制,在这个过程中出现可能无法整除的情况,所以现实中的数转换为二进制并计算的过程中就可能产生误差。JS 采用 IEEE 754 双精度版本(64位),六十四位中符号位占一位,整数位占十一位,其余五十二位都为小数位。二、解释原因:把十进制的0.1和0.2转换为二进制:0.1 => 0.0001 1001 1001 1001…(1001无限循环)0.2 => 0.0011 0011 0011 001原创 2021-09-26 15:02:05 · 232 阅读 · 0 评论 -
【手写代码】防抖&节流
一、防抖(debounce)1. 定义当连续触发一个事件时,将多次执行变成最后一次执行2. 场景有些事件会被频繁触发,但我们不需要他如此频繁,只在最后一次触发做操作即可。例如????搜索框的联想建议3. 手写防抖原理:在事件发生前,取消上一次的定时器,开启新的计时器function debounce(func,wait){ let timeout; return function(){ let context=this; let arg...原创 2021-09-25 08:14:26 · 470 阅读 · 0 评论 -
【ES6】关于var, let和const的区别。let块级作用域理解,let暂时性死区。
var(es5-用于声明变量) 变量可以重复声明,打印出的是最后一次声明内容;let,const不能重复声明 变量声明会被提升;(函数的声明也会被提升)let,const不会提升 var声明的变量没有局部作用域;let,const有块级作用域 let(es6-用来取代var) 不能重复声明;不会提升;有块级作用域 不影响作用域链 const(es6-用来声明常量) 不能重复声明;不会提升;有块级作用域 不能修改(对于数组和对象元素/属性的修改原创 2021-09-21 16:12:51 · 317 阅读 · 0 评论