js
then啥
这个作者很懒,什么都没留下…
展开
-
栈与堆
参考:https://blog.csdn.net/flyingpig2016/article/details/52895620https://blog.csdn.net/zuiziyoudexiao/article/details/72934603https://www.cnblogs.com/jiangk1214/p/6650957.html基本数据类型(number、string、...转载 2018-07-18 21:09:28 · 808 阅读 · 0 评论 -
异步
同步&异步:同步:顺序执行,执行时其余操作皆不可用;异步:分块执行,现在与将来实现原理:js宿主环境(不单指web浏览器)的事件循环机制会使用消息队列对事件进行调度,js引擎只是按需执行代码(ES6中新增了promise,为js真正实现了自身的事件循环管理)单线程&多线程(异步与并行):并行:多个线程可以共享一个进程的内存,跨线程共享数据;同时运行的程序会出...原创 2018-10-05 11:19:21 · 669 阅读 · 0 评论 -
变量提升和执行环境对象
变量提升:变量声明时会被提升到函数作用域的顶部,并赋予undefined值引擎进入作用域时对代码进行两轮处理:先初始化变量,再执行函数。初始化变量中分三个步骤:声明并初始化参数;声明但不初始化变量(变量提升);声明并初始化函数执行环境对象:执行环境:运行中的函数,由函数在执行时发生的所有事物组成执行环境对象:对执行环境的ECMA标准实现,是一种对象。js引擎将变量作为属性保存在对...原创 2018-09-22 12:36:13 · 151 阅读 · 0 评论 -
this绑定的四条规则 ; bind、call、apply的区别
this指向当前函数操作的对象function foo(){ console.log(this.a);}var obj1={ a: 1, foo: foo}obj1.foo(); //1//将上一句换为底下的,则会出现this对象丢失后使用默认绑定的情况//回调函数丢失this对象很常见var test=obj1.foo();//此时obj1.foo指向的是不带任何...原创 2018-09-28 15:41:57 · 428 阅读 · 0 评论 -
for...in与for...of的区别
for...in1.遍历对象的可枚举属性名 (enumerable:true,通过Object.defineProperty(obj,prop,descriptor)修改,通过obj.propertyIsEnumerable(prop)进行判断)2.向上查找原型链中的属性 (如仅想遍历自身属性,加一层if,通过hasOwnProperty()筛选)for...转载 2018-10-08 08:30:03 · 716 阅读 · 0 评论 -
浏览器中的垃圾回收机制
引用计数:一个对象不被其他对象引用时会被回收问题:循环引用时无法回收标记-清除:从根元素开始,周期性标记可被访问的对象,同时回收不可被访问的对象问题:收集垃圾时程序会等待,且回收后的内存空间不连续,于是出现了 标记-整理机制,即回收后会整理内存空间,但效率又会降低一些良好习惯:对不再使用的数据解除引用、占空间大的全局变量用完后声明为null参考:https://develope...原创 2018-10-14 15:08:11 · 2008 阅读 · 0 评论 -
js原型的重点,及相关内建方法的实际使用
原型相关内容:1.所有的函数都有一个prototype属性(即原型),原型默认是一个没有任何自身属性的空对象,原型对象也有自己的原型,向上到顶层是Object对象2.可以在原型对象中添加新属性和方法,也可以令其指向一个自定义对象(如代码中Person.prototype=monkey)3.当使用new操作符,并通过构造函数来实例化对象时,对象会自动拥有一个指向其原型的__proto_...原创 2018-10-08 15:06:16 · 163 阅读 · 0 评论 -
高阶函数的应用
1.作为参数传给其他函数,如回调函数function add(a,b,fn){ return fn(a)+fn(b);};add(1,2,x=>x*2); //62.作为函数返回值function mul(a,b){ let result=a*b; return function(){ result+=1; r...原创 2018-10-16 12:40:03 · 194 阅读 · 0 评论 -
MVP与MVVM模式的区别
MVP:M:数据;V:视图;P:逻辑交互P是主要编码位置,主要是操作dom如:jQueryMVVM:M:数据;V:视图;VM:监听数据层,更新视图层M是主要编码位置,主要操作数据如:Vue (VM的实现原理主要依赖于Object.defineProperty()方法中的get和set,和虚拟dom技术)...原创 2018-11-08 12:29:17 · 1109 阅读 · 0 评论 -
为什么尽量不要使用eval函数和with关键字
编译过程:分词/词法分析;解析/语法分析;代码生成词法作用域:定义在词法阶段的作用域相关概念: 作用域:是一套规则,定义了引擎如何在作用域中通过标识符名称对变量进行查找 作用域工作模型:词法作用域、动态作用域 词法化:编译器工作的第一阶段,即对代码中的字符进行检查。如果是有状态的解析还会赋予单词语义1.性能问题:①.js引擎会在编译阶段进行性能优化,其...原创 2018-09-22 10:11:42 · 1676 阅读 · 0 评论 -
js多维数组
let three = [];for(let i=0;i<4;i++){ three[i]=[]; //令数组three的元素也是数组,下同 for(let j=0;j<3;j++){ three[i][j]=[]; for(let k=0;k<2;k++){ three[i][j][k]=k; ...原创 2018-09-21 19:44:53 · 999 阅读 · 0 评论 -
惰性函数
在javascript里函数可以动态定义,如果创建了一个新函数并且将其分配给保存了另外函数的同一个变量,那么新函数覆盖旧函数。常用于初始化功能。形式:重写函数、立即执行的匿名函数(依据if条件return不同的js语句避免重复执行判断)如ajax浏览器检测,因为不会只发一次请求,但每次都进行浏览器兼容判断没有必要,故可以使用惰性函数,在第一次调用后重新定义函数。 var Obj...转载 2018-09-21 11:05:33 · 332 阅读 · 0 评论 -
存疑:js内存管理与泄露
原文地址:https://blog.csdn.net/z_Sherry/article/details/53353551定义:程序不再需要的内存由由于某种原因无法被回收至内存池。产生的原因:内存是否仍在使用无法精确判定。常见内存泄漏:1.未用var声明直接使用的全局变量、错误使用this(未将this绑定给任何对象导致this指向window) 解决办法:开头声明use st...原创 2018-07-18 20:40:17 · 152 阅读 · 0 评论 -
函数内变量的提升(function hoisting)
1.函数内外有重名的变量时,局部变量会覆盖全局变量,原因是函数域优先于全局域2.当js执行进入函数时,函数内部声明过的所有变量会被提到最前,但同时对变量的赋值等操作不会被提升例:var a=123;function test(){ alert(a); //undefined var a=1; alert(a); //1}test();故:最好...原创 2018-08-09 15:54:40 · 897 阅读 · 0 评论 -
fcc练习:验证字符串正反都一样(正则筛选)
function palindrome(str) { var newStr=str.replace(/[\W_]/g,'').toLowerCase(); var resStr=newStr.split('').reverse().join('').toLowerCase(); return newStr===resStr;}palindrome("eye");原创 2018-08-07 16:10:13 · 330 阅读 · 0 评论 -
NaN与isNaN()
isNaN() 是一个全局方法,它的作用是检查一个值是否能被 Number() 成功转换。当一个字符串不能被 Number、parseInt 或 parseFloat 成功转换时,就返回 NaN,表示该字符串无法被识别为数字类型,这是一个异常状态,并不是一个确切的值。NaN不等于NaN。Number('12abc'); // NaN'123'; // 123'123.78'; /...原创 2018-09-20 12:19:55 · 3797 阅读 · 0 评论 -
面向对象风格与对象关联风格
对相关联:Foo={ init:function(name){ this.name=name; }, sayName:function(){ return 'I am '+this.name; }};Bar=Object.create(Foo); //*Bar.greet=function(){ return 'H...原创 2018-10-01 12:49:16 · 218 阅读 · 0 评论 -
变量数据类型
原始值,即存储在栈(stack)中的简单数据段:Number、String、Boolean、Null、Undefined。它们的值直接存储在变量访问的位置。引用值,即存储在堆(heap)中的对象:Array、Function、Object。存储在变量处的值是一个指针(point),指向存储对象的内存处。注:在很多语言中由于string长度可变而被视为引用值,但在js中string属...原创 2018-09-20 13:52:23 · 98 阅读 · 0 评论 -
隐式转换与装箱问题
一、转换: 1.显式类型转换(强制类型转换):显式调用Boolean(value)、Number(value)、String(value)完成的类型转换2.隐式转换(自动类型转换):当js期望得到某种类型的值,而实际在那里的值是其他的类型,就会发生隐式类型转换。系统内部会自动调用ToPrimitive ( input [ , PreferredType ] )、ToBoolean ( ...原创 2018-09-20 14:50:23 · 357 阅读 · 0 评论 -
闭包
将内部函数传递到所在的词法作用域之外,内部函数会始终保持对原始定义作用域的引用。无论在何处执行这个函数都会使用闭包。常用传出方式:return、赋值给外部全局作用域...原创 2018-10-11 10:14:50 · 189 阅读 · 0 评论 -
立即执行函数IIFE
形式:( function () {...} )()作用:①.es6之前无块作用域,使用此方式用函数作用域进行模拟,从而起到隔离作用域的功能,避免污染外部变量 原因:函数作用域在执行后其内的局部变量会自动销毁,故多个函数内可以使用同名的局部变量 ②.惰性载入:因为函数被执行引擎以同步的方式立即执行了,所以当你在之后的代码访问这个变量的时候可以直接返回计算后的筛选结果了...原创 2018-09-21 11:00:13 · 169 阅读 · 0 评论 -
js事件三阶段与事件委托
首先明确一个概念,js中事件包含三个阶段:捕获 到达目标 冒泡 事件委托:将子元素上的事件委托给父元素监听,从而无需对每一个子元素设置监听事件。例如ul嵌套多个li,要点击时alert每个li的innerText<ul id="ul"> <li>1</li> <li>2</li> <l..原创 2018-11-26 20:01:19 · 296 阅读 · 0 评论