自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 JavaScript函数的三种角色

函数即是函数是一个类,能当作构造函数执行;也是一个普通对象,可以添加属性和方法。所以函数有三种角色:1.函数;2.类;3.普通对象。函数是一个堆,函数体中堆代码以字符串的形式保存在这个堆中;同时函数也是一个普通对象有一些自己的属性【name、length、prototype、__proto__等属性】;函数还是类,作为构造函数通过new可以得到自己的实例。函数作为类的时候才有原型prototype,Foo.prototype上的可以设置公共的属性和方法(供new Foo出来的实例调用的,这些实例可以通过

2020-05-24 21:27:16 280

原创 CALL的原理解析及相关习题

CALL的原理解析首先来来了解一下如何获取除第一个参数以外其它参数:以下两种方法都是利用ES6的规则//1.方法一:利用剩余运算符Function.prototype.call = function call(context, ...params) { context == null ? context = window : null; //params就是除了第一个参数外剩余其它参数组成的数组}//2.方法二:利用ES6的新方法 Array.form()Function.pro

2020-05-23 18:23:36 879

原创 CALL和APPLY的具体应用

call和apply是用来改变this指向的,并且把函数立即执行。需求:需要把类数组转换为数组(call的应用)类数组:具备和数组类似的结构(索引和length属性以及具备iterator可迭代性),但是并不是数组的实例(不能用数组原型上的方法),我们把这样的结构称为类数组结构。function func(){ console.log(arguments);}func(10,20,30,40);/*Arguments(4) [10, 20, 30, 40, callee: ƒ

2020-05-23 13:49:52 315

原创 CALL和APPlY以及BIND语法(含BIND的核心原理)

CALL和APPlY以及BIND语法(含BIND的核心原理)每个函数都是Function的一个实例,Function原型(Function.prototype)上有3个方法call、apply、bind,所有的函数都可以通过原型链__proto__找到Function原型(Function.prototype)上的这三个方法Function.prototype:call、apply、bind,这三个方法都是用来改变函数中的THIS的call:[function].call([context],p

2020-05-20 23:18:40 176

原创 Object常用方法描述

Object() 对象内置类(每一个对象都是它的实例)通过在控制台中打印查看Object中提供的方法和属性,使用时直接Object.XXX来调用Object上的属性和方法。Object//控制台输出:ƒ Object() { [native code] }dir(Object)//控制台输出:ƒ Object() -- 展开如下/*arguments: (...)assign: ƒ assign()caller: (...)create: ƒ create()definePropert

2020-05-18 21:39:24 524

原创 由数组的面向对象原型体系来解析Function和Object两大内置类的复杂关系

首先来大概浏览下这张数组的面向对象原型体系图,然后一起由这张图来分析Function和Object两大内置类的复杂关系,将数组和对象之间的两大属性__proto__和prototype的指向问题彻底理解。这张图以普通数组arr作为开端,分析Array内置类,再分析Function内置类,再分析Object内置类,最后整体分析相互之间的__proto__和prototype。第一:Array()内置数组类所有的对象都有属性__proto__ ,所有的函数都有属性prototype//数组arr是数组A

2020-05-18 21:37:43 226

原创 彻底理解Javascript中的THIS

JS中THIS的五种情况事件绑定普通函数执行构造函数执行箭头函数call/apply/bindTHIS:全局上下文中的THIS是WINDOW;块级上下文中没有自己的THIS,它的THIS是继承所在上下文中的THIS的;在函数的私有上下文中,THIS的情况会多种多样,也是接下来我们重点研究的;THIS不是执行上下文(EC才是执行上下文),THIS是执行主体例如:Tom拿着鸡蛋灌饼去公司吃早餐(事情本身是吃早餐,Tom吃早餐,这件事情的主体是Tom【THIS】,在公司吃,公司是事情发生所在的

2020-05-18 12:38:42 385

原创 闭包及高阶应用2(柯理化和COMPOSE)

柯理化函数:预先存储或者叫做预先处理的概念//例题:实现下面的函数let res = fn(1, 2)(3);console.log(res); //=======================//实现如下:function fn(x, y) { // 第一次执行函数,形成一个临时不被释放的上下文(闭包),在闭包中我们保存下来传递的参数信息,当后期执行小函数的时候,可以基于作用域链机制,找到闭包中存储的信息,并且拿来使用,所以形成的闭包类似于预先把一些信息进行存储,这种思想就就叫柯理化函数思

2020-05-18 12:35:25 223

原创 闭包及高阶应用1(惰性函数和单例设计模式)

首先来看一道开放题:谈谈你对闭包的理解,以及在项目中的应用!阐述闭包是什么?(引申:堆栈、EC、AO、VO、SCOPE…)闭包的作用及在真实项目中的应用场景,以及所带来的问题!由闭包引发的高阶编程技巧突出自己在分析研究框架的源码(逼格更高的是自己写类库、插件的时候)是怎么应用这些东西的!建议:浏览器加载页面会把代码放到栈内存中执行(也就是ECStack),函数进栈执行会产生一个私有的上下文(也就是EC),此上下文能保护里面的私有变量(也就是AO)不受外界的干扰,并且如果当前上下文中的某些内容,被

2020-05-18 12:34:32 213

原创 超实用的JavaScript数组去重的几种方式

简单数组去重方案一:1.循环数组中的每一项,每拿到一项都往新数组中添加,2.添加之前验证数组中是否存在这一项let ary = [1, 2, 3, 1, 2, 3, 4, 5, 6, 4, 5, 6, 3, 2, 7];let res = [];for (let i = 0; i < ary.length; i++) { let item = ary[i]; if (!res.indexOf(item) > 0) { ary[key](item);

2020-05-16 15:23:57 249

原创 2-JavaScript中字符串的概念及其常用方法

字符串概念所有用单引号,双引号,反引号包起来的都是字符串let str = 'helloWorld';//每一个字符串都是由零到多个字符组成的str.length;//=>字符串长度str[0];//=>获取索引为0(第一个)字符str[str.length-1];//=>获取最后一个字符str.length-1最后一项索引str[1000];//=>undefined 不存在这个索引//数组通过索引和对象通过属性名来获取值不存在时都返回undefined//循

2020-05-16 14:34:06 291

原创 4-掌握JavaScript数学函数Math常用的方法

Math称为数学函数,但是它属于对象类型的typeof Math;//'object'之所以叫数学函数,是因为Math这个对象中提供了很多操作数字的方法console.dir(Math);//Math 是一个对象,有很多属性和方法/*控制台打印:Math={ //属性E: 2.718281828459045LN10: 2.302585092994046LN2: 0.6931471805599453LOG10E: 0.4342944819032518LOG2E: 1.44269

2020-05-15 08:59:04 215

原创 1-JavaScript应该掌握的基础概念

JavaScript三部分组成:ECMAScript(ES):描述了该语言的语法和基本对象DOM:文档对象模型,描述处理网页内容的方法和接口BOM:浏览器对象模型,描述与浏览器进行交互的方法和接口推荐书籍:(阅读顺序-最上面的最重要)1.JavaScript高级程序设计2.ES63.你不知道的JavaScript4.JavaScript权威指南变量和数据类型(variable && data type)【变量】多种定义方式:var/let/const/func

2020-05-14 17:42:29 1499

原创 JS底层运行原理:闭包机制

首先一起来看一道相关面试题:let x = 1;function A(y){ let x = 2; function B(z){ console.log(x+y+z); } return B;}let C = A(2);C(3);此道面试题的图解:图解步骤分析:所有代码执行都必须放在栈内存中执行,浏览器刚开始加载页面的时候会形成一个栈内存...

2020-05-07 12:44:31 394

原创 一道面试题解析新旧版本浏览器下的变量提升

safari浏览器和ie10及以下的浏览器一样都是低版本的浏览器。现在最新版本的浏览器要前后都兼容:->向前兼容ES3/5规范1.判断体和函数体等不存在块级上下文,上下文只有全局和私有2.不论条件是否成立,带function的都要声明+定义-> 向后兼容ES6规范1.存在块级作用域,大括号中出现let/const/function……都会被认为是块级作用域2.不论条件是...

2020-05-05 13:52:44 319

原创 三道面试题带你彻底理解变量提升

首先我们先来看一下这三道面试题,都是写出代码执行后的输出结果。第一道面试题fn(); function fn() { console.log(1); } fn(); function fn() { console.log(2); }fn(); var fn = function () { console.log(3); } fn(); function fn() { co...

2020-05-03 16:14:54 2200 1

原创 一道面试题带你彻底读懂parseInt()

让我们先来看一下这道面试题,大家试着做一下:let arr = [1, 2, 3, 4];arr = arr.map(parseInt);console.log(arr);将代码在浏览器中执行一下你就能得出正确答案,如果这道题你顺利的得出来答案那就不用看了,如果没有那就一起来分析下吧。在讲解parseInt()之前先一起回顾一下js数组的遍历方法forEach 遍历数组中的每一项(...

2020-05-03 15:43:50 600

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除