1.let A:let关键字:将变量绑定到所在的任意作用域 function process(){ //do something } //在这个块中定义的内容完事就可以销毁 { let someReallyBigData = {…………}; process(someReallyBigData); } vra btn = document.getElementById("my_button"); btn.addEventListener('click',function click(ev…
你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章   初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目吸引眼球,以致最初真没去看内容.直到出了中文版<你不知道的JavaScript>,一看评价大家都说好,买来一读,内容果然很好,很多地方,让我这个半路转行JavaScript的人豁然开朗.中文版现在出了上卷,中卷应该很快会推出,下卷就要等久一点了 作用域和闭包 作用域是什么 1.现代JavaScri…
console.log( a ); var a = 2; 执行输出undefined a = 2; var a; console.log( a ); 执行输出2 说明:javaScript 运行时在编译器阶段会最先处理var a;也就是变量被提升 foo(); function foo() { console.log( a ); // undefined var a = 2; var a = 2; } 执行输出undefined,执行foo();时找到了函数的声明,但实际代码写在foo()的后面…
[[Prototype]]机制 [[Prototype]]是对象内部的隐试属性,指向一个内部的链接,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototype]] 关联的对象上进行查找.同理,如果在后者中也没有找到需要的 引用就会继续查找它的 [[Prototype]],以此类推.这一系列对象的链接被称为“原型链”. function Foo() { // ... } var a = new Foo(); Object.getPrototypeOf(…
一.创建一个对象的语法 var myObj = { key: value // ... };//字面量 var myObj = new Object(); //new myObj.key = value; 二.js中的内置对象 String,Number,Boolean,Object,Function,Array,Date,RegExp,Error 在使用string 等创建的字面量形式时,js会隐试转换成其对应的内置对象,null 和 undefined没有对应的构造形式,Date 只有构造,…
function foo() { console.log( a ); } function bar() { var a = 3; foo(); } var a = 2; bar(); 上面这段代码为什么会输出2,而不是3?因为javaScript 只有词法作用域,foo()的定义在全局作用域,执行时会在它所在词法作用域查找变量a this 的作用域 function foo() { var a = 2; this.bar(); console.log(this) } function bar()…
什么是闭包 闭包是javaScript语言的一种特性,在 javaScript 中以函数作为承接单元.当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行. function foo() { var a = 2; function bar() { console.log( a ); } bar(); } foo(); bar() 产生了闭包,但是由于它内嵌在foo函数里面执行,bar中对a的引用遵循了词法作用域的查找规则,其实也是闭包查询规则的一部分. fun…
一.什么是词法作用域? 词法作用域是在定义词法阶段的作用域,就是由代码变量和作用域块写在哪里决定的,基本上词法分析器在处理代码时会保持作用域不变. 二.词法作用域特点 完全由写代码期间函数所声明的位置来定义 词法作用域查找只查找一级标志符(foo.bar.baz,只试图查找foo标志符) 三.如何运行时修改词法作用域? eval() function foo(str,a){ eval(str) //会修改foo函数的词法作用域 console.log(a,b)}var b = 2;foo('va…
一.什么是作用域? 作用域是用来存储变量以及方便寻找变量的一套规则. 二.javaScript 编译过程(编译发生在代码执行前的几微妙) 分词/词法分析(Tokenizing/Lexing)->词法单元 解析/语法分析(paring)-> AST 对运行性能进行优化 代码生成 -> 机器指令,创建变量分配内存等操作 三.从 var a = 2:理解 javaScript 的工作原理 编译器将var a = 2:分解成词法单元,然后解析成AST抽象语法树: 编译器查找作用域中是否已经有a这…
第一部分: 作用域和闭包 一.作用域 1. 作用域:存储变量并且查找变量的规则 2. 源代码在执行之前(编译)会经历三个步骤: 分词/此法分析:将代码字符串分解成有意义的代码块(词法单元) 解析/语法分析:将词法单元流转换成抽象语法树(AST) 代码生成:将抽象语法树转换成可执行代码 3. LHS查询: 变量出现在赋值操作左侧, RHS查询: 变量出现在赋值操作右侧 4. 作用域嵌套:在当前作用域中无法找到某个变量的时候,引擎就会在外层的嵌套作用域中继续查找,直到找到该变量,或抵达最外层的作用域…
github原文 一. 序言 最近我在读一本书:<你不知道的JavaScript>,这书分为上中卷,内容非常丰富,认真细读,能学到非常多JavaScript的知识点,希望广大的前端同胞们,也入手看看这本书,受益匪浅. <你不知道的JavaScript上卷> 现在我读完这本书的一些心得与总结: 一.作用域闭包 先来一段代码: function foo(){ var a = 10; function bar(){ console.log(a); // 10 } bar() } foo(…
在写这篇博客时这本书我已经是看过一遍了,为了加深印象和深入学习于是打算做这系列的前端经典书籍导读博文,大家如果觉得这本书讲的好可以自己买来看看,我是比较喜欢看纸质版书的,因为这样才有读书的那种感觉. 本期我给大家讲述的是     前端经典js书籍   <<你不知道的javaScript(上卷)>> 第一章内容的知识点总结和讲解. 1.1 编译原理 尽管通常将js归类为"动态"或"解释执行"语言,但事实上它是一门编译语言.但与传统的编译语言不同…
原文 一. 序言 最近我在读一本书:<你不知道的JavaScript>,这书分为上中卷,内容非常丰富,认真细读,能学到非常多JavaScript的知识点,希望广大的前端同胞们,也入手看看这本书,受益匪浅. <你不知道的JavaScript上卷> 现在我读完这本书的一些心得与总结: 很多人在做项目时候,遇到bug是我们程序猿最令人头疼的一件事,不过,无论多大多小的bug,都会被我们debug,所以,一切的bug都有原因,只要慢慢静下心来细想想这段代码的流程结构是否正确,哪一步骤出了错…
前段时间在每天往返的地铁上抽空将 <你不知道的JavaScript(上卷)>读了一遍,这本书很多部分写的很是精妙,对于接触前端时间不太久的人来说,就好像是叩开了JavaScript的另一扇门,很多内容醍醐灌顶!所以决定将这本书分四个部分整理出来,同时也这本书强烈推荐给正在进阶的小伙伴们.这篇博文主要整理第一部分 作用域. 词法作用域 理解作用域 首先要介绍下JS参与程序 var a = 2的处理过程的演员表: 引擎 从头到尾负责整个JavaScript 程序的编译及执行过程. 编译器 引擎的好…
关于闭包,初学者会被绕的晕头转向,在学习的路上也付出了很多精力来理解. 让我们一起来揭开闭包神秘的面纱. 闭包晦涩的定义 看过很多关于闭包的定义,很多讲的云里雾里,晦涩难懂.让不少人以为闭包是多么玄乎的东西.在我看过的所有书籍中,我更喜欢<你不知道的javascript(上卷)>的定义: 当函数可以记住并访问所在的词法作用域时,就产生了闭包,或者说函数在创建时的词法作域之外执行. 通俗的来说(不严谨): 就是函数套函数,子函数可以有权访问父函数的变量.父函数的父函数的变量.一直到全局变量.子函…
概述 这是我看<你不知道的JavaScript(中卷)>中关于类型检查的笔记,供以后开发时参考,相信对其他人也有用. typeof 我们知道js中有七种内置类型:undefined, null, string, boolean, object, number, symbol. 我们分别用typeof对它们一一进行检查: typeof void(0) //输出'undefined' typeof null //输出'object' typeof 'haha' //输出'string' typeo…
用了一个星期把<你不知道的JavaScript>看完了,但是留下了很多疑惑,于是又带着这些疑惑回头看JavaScript的内容,略有所获. 第二遍阅读这本书,希望自己能够有更为深刻的理解. 词法作用域 --如果是 有状态 的解析过程,还会赋予单词语义-- 这本书是以编译原理的部份内容结合JavaScript来开篇的,所以如果没有学过编译原理,这一小部分内容显得有些晦涩. 虽然多数人没有接触过编译原理,但有一个东西必定知道,就是markdown语法.实际上,从markdown文件到HTML的过程…
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC" } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; min-height: 25.0px } p.p3 { margin: 0.0px 0.0px 12.0px 0.0px; line-height: 14.0px; font: 18.0px &q…
一.对象 对象可以通过两种形式定义:声明(文字)形式和构造形式.即: var myObj = { key: value // ... }; 或: var myObj = new Object(); myObj.key = value; 对象还有一些内置对象: String.Number.Boolean.Object.Function.Array.Date.RegExp.Error. 访问对象属性可以使用. 操作符(属性访问)或者[] 操作符(键访问),区别在于:于. 操作符要求属性名满足标识符的…
this是什么? this 是在运行时进行绑定的,并不是在编写时绑定,它的上下文取决于函数调用时的各种条件.this 的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式.当一个函数被调用时,会创建一个活动记录(有时候也称为执行上下文).这个记录会包含函数在哪里被调用(调用栈).函数的调用方法.传入的参数等信息.this 就是记录的其中一个属性,会在函数执行的过程中用到. 调用位置与调用栈: 调用位置就是函数在代码中被调用的位置(而不是声明的位置). 下面我们来看看到底什么是调用栈和调用位…
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> </body> <script type="text/javascript"> { let j; for(j=0;j<10;j…
近几天看了一本不错的 JavaScript 的书,是 Kyle Simpson 写的 <You Don't know JS>.这本书是 Kyle Simpson 在 Github 上的开源项目,截止到现在已经有 27,796 个 star .本想看英文版本,不料在某东上看到了中文版,于是乎就买下了.结果,翻译得还不错,推荐. 原著github地址 ,某东链接自行搜索呵呵. 这本书属于JavaScript开发者的进阶读物,原著至今为止已经出了6本,中文版(上卷)涵盖了其中的两本,介绍了4个知识点…
this词法 熟悉ES6语法的开发者,箭头函数在涉及this绑定时的行为和普通函数的行为完全不一致.跟普通this绑定规则不一样,它使用了当前的词法作用域覆盖了this本来的值. 误解 this理解成指向函数本身,函数对象的属性(Fun.X)不是this.X [X] this指向函数的作用域 [X] this是运行时进行绑定的,而不是编写时绑定的,它的执行上下文取决于函数调用时的各种条件,this的绑定和函数声明的位置没有任何关系,只取决于函数的调用方式(调用位置),具有动态性,简单地说,函数执…
三剑客 编译,顾名思义,就是源代码执行前会经历的过程,分三个步骤, 分词/词法分析,将我们写的代码字符串分解成多个词法单元 解析/语法分析,将词法单元集合生成抽象语法树(AST) 代码生成,抽象语法树(AST)转换成可执行代码的过程 Tip1:js在语法分析和代码生成阶段有对运行性能进行优化,对冗余元素进行优化 Tip2:js的编译过程不是发生在构建之前,而是代码执行之前 理解作用域,首先知道三剑客,分别是 引擎:负责整个代码编译及执行的过程 编译器: 负责词法分析.语法分析.代码生成 作用域:…
本篇主要演示通过webpack打包phaser项目,webpack安装方法在此处就不一一赘述了 经常用phaser来写html5游戏的朋友可能会发现,当游戏场景比较多时,如果都写在一个js文件中那么将来会很难维护,如果分成多个JS分别来管理不同的场景将会很方便 1. 首先来到项目根目录 在该目录中打开命令行,然后启动webpack 2.在app目录中建立一个文件夹,主要用来放置打包前的文件 从图中可以很看到,分成了专门用来引导,预加载,游戏菜单,游戏主逻辑,等js文件,由于用的是ES6的模块语法…
第一部分 作用域和闭包 第1章 作用域是什么 (已看) 1.1 编译原理 1.2 理解作用域 1.2.1 演员表 1.2.2 对话 1.2.3 编译器有话说 1.2.4 引擎和作用域的对话 1.2.5 小测验 1.3 作用域嵌套 1.4 异常 1.5 小结 第2章 词法作用域  (已看) 2.1 词法阶段 2.2 欺骗词法 2.2.1 eval 2.2.2 with 2.2.3 性能 2.3 小结 第3章 函数作用域和块作用域 (已看) 3.1 函数中的作用域 3.2 隐藏内部实现 3.3 函数…
处理程序三要素: 引擎:编译与执行过程. 编译器:语法分析与代码生成等. 作用域:收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非常严格的规则,确定当前执行的代码对这些标识符的访问权限. 示例: var a=2;的解析过程: 1.编译器 询问 作用域 是否已经有该名称的变量 是:忽略该声明,继续执行: 否:声明一个新变量,命名为a; 2.编译器为引擎生成代码 引擎运行首先询问作用域,在当前作用域集合中是否存在一个a的变量: 是:引擎会使用这个变量; 否:引擎继续查找该变量; 找…
第一部分——作用域和闭包 第一章 作用域是什么 1.几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个值进行访问或修改.事实上,正是这种储存和访问变量的值的能力将状态带给了程序. 2.JavaScript与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植. 3.传统编译语言的流程,编译“三个步骤” *分词/词法分析 将由字符组成的字符串分解成(对编程语言来说)有意义的代码块(被称为词法单元 token).例如 var a = 2; 会被分解成…
声明 本篇内容全部摘自阮一峰的:ECMAScript 6 入门 阮一峰的这本书,我个人觉得写得挺好的,不管是描述方面,还是例子,都讲得挺通俗易懂,每个新特性基本都还会跟 ES5 旧标准做比较,说明为什么会有这个新特性,这更于理解. 所以,后续不会再写个关于 ES6 系列的文章了,就在这篇里大概的列举一下,大体清楚都有哪些新特性就好了,以后需要用时再去翻一翻阮一峰的书. 正文-ES6新特性 ES6 新标准规范相比于 ES5 旧标准规范中,无非就三个方面的改动:新增.更新.废弃. 由于更新和废弃需要…
你不知道的JavaScript上卷 JavaScript和Java的关系就像Carnival和Car的关系一样,八竿子打不着. JavaScript易上手,但由于其本身的特殊性,相比其他语言能真正掌握JavaScript的人比较少.JavaScript语言本质上有许多复杂的概念,但却用一种看起来比较简单的方式体现出来,比如回调函数.JavaScript开发者只是简单使用这些特性而不会去关心语言内部的实现原理. 阿喀琉斯之踵 不要满足于只是让代码正常工作,而是弄清楚为什么,拥抱整个JavaScri…