#新理解

深入理解this机制系列第二篇——this绑定优先级

  上一篇介绍过this的绑定规则,那如果在函数的调用位置上同时存在两种以上的绑定规则应该怎么办呢?本文将介绍this绑定的优先级 显式绑定pk隐式绑定  显式绑定胜出functionfoo(){console.log(this.a);}varobj1={a:2,foo:foo};varobj2={a:3,f...

深入理解this机制系列第一篇——this的4种绑定规则

  如果要问javascript中哪两个知识点容易混淆,作用域查询和this机制绝对名列前茅。前面的作用域系列已经详细介绍过作用域的知识。本系列开始将介绍javascript的另一大山脉——this机制。本文是该系列的第一篇——this的4种绑定规则 默认绑定 ...

深入理解闭包系列第四篇——常见的一个循环和闭包的错误详解

  关于常见的一个循环和闭包的错误,很多资料对此都有文字解释,但还是难以理解。本文将以执行环境图示的方式来对此进行更直观的解释,以及对此类需求进行推衍,得到更合适的解决办法 犯错functionfoo(){vararr=[];for(vari=0;i<2;i++){arr[i]=function(){r...

深入理解闭包系列第三篇——IIFE

  严格来讲,IIFE并不是闭包,因为它并不满足函数成为闭包的三个条件。但一般地,人们认为IIFE就是闭包,毕竟闭包有多个定义。本文将详细介绍IIFE的实现和用途 实现  函数跟随一对圆括号()表示函数调用//函数声明语句写法functiontest(){};test();//函数表达式写法vartest=f...

深入理解闭包系列第二篇——从执行环境角度看闭包

  本文从执行环境的角度来分析闭包,先用一张图开宗明义,然后根据图示内容对代码进行逐行说明,试图对闭包进行更直观的解释 图示 说明  下面按照代码执行流的顺序对该图示进行详细说明functionfoo(){vara=2;functionbar(){console.log(a);}returnbar;...

深入理解闭包系列第一篇——到底什么才是闭包

  闭包已经成为近乎神话的概念,它非常重要又难以掌握,而且还难以定义。本文就从闭包的定义说开去 古老定义  闭包(closure),是指函数变量可以保存在函数作用域内,因此看起来是函数将变量“包裹”了起来  那这样说来,包含变量的函数就是闭包//按照古老定义,包含变量n的函数foo就是...

深入理解javascript作用域系列第五篇——一张图理解执行环境和作用域

  对于执行环境(executioncontext)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关于作用域的两种不同翻译而已。但实际上,它们并不相同,却相互纠缠在一起。本文先用一张图开宗明义,然后进行术语的简单解释,最后根据图示内容进行详细说明 图示查看大图 概...

一张图理解prototype、proto和constructor的三角关系

  javascript里的关系又多又乱。作用域链是一种单向的链式关系,还算简单清晰;this机制的调用关系,稍微有些复杂;而关于原型,则是prototype、proto和constructor的三角关系。本文先用一张图开宗明义,然后详细解释原型的三角关系 图示 概念  上图中的复杂关系,实际上来源...

深入理解javascript函数系列第三篇——属性和方法

  函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样。甚至可以用Function()构造函数来创建新的函数对象。本文是深入理解javascript函数系列第三篇——属性和方法 属性【length属性】  函数系列第二篇中介绍过,argumen...

深入理解javascript函数系列第二篇——函数参数

  javascript函数的参数与大多数其他语言的函数的参数有所不同。函数不介意传递进来多少个参数,也不在乎传进来的参数是什么数据类型,甚至可以不传参数。本文是深入理解javascript函数系列第二篇——函数参数 arguments  javascript中的函数定义并未指定函数形...

深入理解javascript函数系列第一篇——函数概述

  函数对任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且可以在任何地方、任何时候调用执行。在javascript里,函数即对象,程序可以随意操控它们。函数可以嵌套在其他函数中定义,这样它们就可以访问它们被定义时所处的作用域中的任何变量,它给javascript带来了非常强劲的编程能力。本文是深入理解...

深入理解javascript作用域系列第四篇——块作用域

  尽管函数作用域是最常见的作用域单元,也是现行大多数javascript最普遍的设计方法,但其他类型的作用域单元也是存在的,并且通过使用其他类型的作用域单元甚至可以实现维护起来更加优秀、简洁的代码,比如块作用域。随着ES6的推广,块作用域也将用得越来越广泛。本文是深入理解javascript作用域系列第四篇&mdas...

深入理解javascript作用域系列第三篇——声明提升(hoisting)

  一般认为,javascript代码在执行时是由上到下一行一行执行的。但实际上这并不完全正确,主要是因为声明提升的存在。本文是深入理解javascript作用域系列第三篇——声明提升(hoisting) 变量声明提升a=2;vara;console.log(a);  直觉上,会认为是...

深入理解javascript作用域系列第二篇——词法作用域和动态作用域

  大多数时候,我们对作用域产生混乱的主要原因是分不清楚应该按照函数位置的嵌套顺序,还是按照函数的调用顺序进行变量查找。再加上this机制的干扰,使得变量查找极易出错。这实际上是由两种作用域工作模型导致的,作用域分为词法作用域和动态作用域,分清这两种作用域模型就能够对变量查找过程有清晰的认识。本文是深入理解javasc...

深入理解javascript作用域系列第一篇——内部原理

  javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域。作用域貌似简单,实则复杂,由于作用域与this机制非常容易混淆,使得理解作用域的原理更为重要。本文是深入理解javascript作用域系列的第一篇——内部原理  内部原理分成编译、执行...
首页上一页...4445464748...下一页尾页