![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JavaScript深入浅出
文章平均质量分 76
诸葛亮剑
积小流以成江海,积跬步以至千里
展开
-
关于声明VS表达式
函数声明function add(a,b){ a=+a; b=+b; if(isNaN(a)||isNaN(b)){ return 0; } return a+b; }函数表达式//function variable var add=function(a,b){ //do sth }...原创 2018-06-18 11:43:17 · 603 阅读 · 1 评论 -
字符串slice、substr、substring方法的区别总结
string.slice(start, end):提取一个字符串,但不包括第二个参数所指定的元素string.substring(start, end):提取一个字符串,end不支持负数,且不包括第二参数所指定的元素string.substr(start, len):从start位置提取一个长度为len的字符串...原创 2019-02-16 18:25:38 · 455 阅读 · 0 评论 -
OOP补充
模拟重载function Person(){ var args=arguments; if(typeof args[0]==='object'&&args[0]){ //这里还要防止args[]为null的情况,因为null也为Object if(args[0].name){ this.name=args[0].name; ...原创 2018-06-19 10:36:22 · 131 阅读 · 0 评论 -
浅谈原型链
代码:function Person(name,age){ this.name=name; this.age=age;}Person.prototype.hi=function(){ console.log("Hi,my name is"+this.name+",I'm"+this.age+"years old now.");};Person.prototype.LEGS_NUM...原创 2018-06-19 10:31:08 · 140 阅读 · 0 评论 -
Object Oriented Programming继承
基于原型的继承例:function Foo(){ this.y=2;}console.log(typeof Foo.prototype); //"Object"Foo.prototype.x=1;var obj3=new Foo();console.log(obj3.y); //2console.log(obj3.x); //1图解:注意:Object.prototype属性与原型proto...原创 2018-06-19 10:23:29 · 545 阅读 · 0 评论 -
深入理解上下文
概念EC:函数执行环境(或执行上下文),Execution ContextECS:执行环境栈,Execution Context StackVO:变量对象,Variable ObjectAO:活动对象,Active Objectscope chain:作用域链EC执行上下文每次当控制器转到ECMAScript可执行代码的时候,就会进入到一个执行上下文。可执行代码的类型1、全局代码(Global c...转载 2018-06-18 12:04:09 · 1169 阅读 · 0 评论 -
作用域
js作用域没有块级划分,其作用域主要分为三类:全局作用域、函数作用域、eval作用域例1:var a=10; //全局作用域(function(){ //函数作用域 var b=20; })();console.log(a); //10console.log(b); //error,b in no defined例2:for(var item in {a:1...原创 2018-06-18 12:01:26 · 124 阅读 · 0 评论 -
深入理解闭包
变量的作用域变量作用域两种:全局变量和局部变量js特殊之处在于函数内部可以直接读取全局变量例1:var n=999;function f1(){ alert(n);}f1(); //999另一方面函数外部无法读取函数内的局部变量例2: function f1(){ var n=999;}alert(n); //Error函数内部声明变量的时候,一定要用var,不用的话...原创 2018-06-18 11:59:42 · 347 阅读 · 0 评论 -
Array.prototype.slice.call()方法
先将该方法拆分成两部分:1、Array.prototype.slice()该方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象,且原数组不会被修改。根据以上定义,我们可以猜测下该方法的实现原理:Array.prototype.slice=function(start,end){ var result=new Array(); start=start||0; ...原创 2018-06-18 11:58:29 · 1214 阅读 · 1 评论 -
关于函数currying 柯里化
js柯里化是逐步传参,逐步缩小函数的适用范围,逐步求解的过程例1:var concat3Words = function (a, b, c) { return a+b+c;};函数柯里化呢?是分部求解,先传一个a参数,再传一个b参数,再传一个c参数,最后将这三个参数相加!例2:var concat3WordsCurrying = function(a) { return functio...原创 2018-06-18 11:56:48 · 187 阅读 · 0 评论 -
关于函数属性arguments
函数属性&arguments例:function foo(x,y,z){ console.log(arguments.length); //2 实参个数 console.log(arguments[0]); //1 arguments是类数组与Array不同 arguments[0]=10; console.log(x); ...原创 2018-06-18 11:56:00 · 309 阅读 · 0 评论 -
关于bind方法
理解js中bind方法的使用 提到bind方法,估计大家还会想到call方法、apply方法;它们都是Function对象内建的方法,它们的第一个参数都是用来更改调用方法中this的指向。需要注意的是bind 是返回新的函数,以便稍后调用;apply 、call 则是立即调用原函数 。而今天我们主要讲解bind方法的理解与使用。bind方法是EcmaScript5新增的方法,该方法在mdn上是这...原创 2018-06-18 11:54:47 · 660 阅读 · 0 评论 -
call()方法和apply()方法总结
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。2. 相同点:这两个方法的作用是一样的。都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。call方法使用示例://例1window.color='red';doc...原创 2018-06-18 11:53:58 · 346 阅读 · 0 评论 -
关于this
全局的this(浏览器)console.log(this.document===document); //trueconsole.log(this===window); //truethis.a=37;console.log(window.a); //37一般函数的this(浏览器)function f1(){ return this;};f1()===window; /...原创 2018-06-18 11:53:18 · 146 阅读 · 0 评论 -
数组split、splice、slice方法的区别总结
split() (译:分裂,分开)用于把一个字符串分割成字符串数组,例:var str="this is jacob";console.log(str.split(""));//["t", "h", "i", "s", " ", "i", "s", " ", "j", &qu原创 2019-02-16 18:26:24 · 7608 阅读 · 0 评论