"闭包是函数和声明该函数的词法环境的组合." 这是MDN上对闭包的定义. <JavaScript高级程序设计>中则是这样定义的:闭包是指有权访问另一个函数作用域中的变量的函数. 个人更倾向于MDN的闭包定义,原因有三: 其一,如果仅将闭包定义为可访问其父作用域(链)的局部变量的函数,那么就忽视了它持有外部环境(使外部作用域不被销毁)的意义. 其二,闭包有权访问的必然是其父作用域(链)中的局部变量,"另一个函数作用域"的说法不够明确清晰. 其三,就是本篇博…
本章探讨如何将 ES6 的新语法,运用到编码实践之中,与传统的 JavaScript 语法结合在一起,写出合理的.易于阅读和维护的代码. 1.块级作用域 (1)let 取代 var ES6 提出了两个新的声明变量的命令:let和const.其中,let完全可以取代var,因为两者语义相同,而且let没有副作用. 'use strict'; if (true) { let x = 'hello'; } for (let i = 0; i < 10; i++) { console.log(i); }…
上一章介绍了模块的语法,本章介绍如何在浏览器和 Node 之中加载 ES6 模块,以及实际开发中经常遇到的一些问题(比如循环加载). 1.浏览器加载 传统方法 HTML 网页中,浏览器通过<script>标签加载 JavaScript 脚本. <!-- 页面内嵌的脚本 --> <script type="application/javascript"> // module code </script> <!-- 外部脚本 -->…
1.数组的解构赋值 基本用法 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. var a = 1; var b = 2; var c = 3; ES6允许写成下面这样. var [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌套数…
1.数组的解构赋值 1.1基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样. let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值.的确高大上了许多有木有. 本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予对应的…
继承 程序中的继承: 子类可以继承父类的一些属性和方法 class Father { //父类 constructor () { } money () { console.log(100) } } class Son extends Father { //子类继承父类 } let son = new Son() son.money() // 100 son. super关键字 super关键字用于访问和调用对象父类上的函数,可以通过调用父类的构造函数,也可以调用父类的普通函数 class Fat…
一.数组的解构赋值 1.基本用法 ES6允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,该操作即为解构 如: let [a,b,c]=[1,2,3]; console.log(a,b,c) // a=1 b=2 c=3 let [foo,[[bar], baz]]=[1,[[2],3]]; console.log(foo,bar,baz) // foo=1 bar=2 baz=3 这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值 注意: 1.没有…
前言 说到import和require,大家平时开发中一定不少见,尤其是需要前端工程化的项目现在都已经离不开node了,在node环境下这两者都是大量存在的,大体上来说他们都是为了实现JS代码的模块化,那为什么会出现两种方案呢,又有什么不同呢? 模块化的不同解决方案 追根溯源,JS这门脚本语言设计伊始就是没有模块化的,所以早期的全局变量容易造成命名冲突.但随着web项目越来越大,JS的代码量也与日俱增,于是社区就自发约定了几种模块化的方案:requirejs遵循AMD,seajs遵循CMD,no…
Array 新增方法 1.Array.from() 将类数组(dom对象 或 arguments)或set\map对象转换为数组 2.Array.of() 将一组值转换为数组,例如Array.of(3,5,7,9) => [3,5,7,9] 3.Array.prototype.copyWithin() 数字内部复制 4.数组实例的find()和findIndex() 例如[1,2,3].find(n => n > 2) // 3 5.数组实例的fill() 使用给定的值填充数组 6.数组…
一.字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点. 表示法只限于码点在\u0000~\uFFFF之间的字符,超过该范围需要用两个双字节表示 ES6改进:将码点放入大括号,就能正确解读该字符. 转换参考:https://blog.csdn.net/hezh1994/article/details/78899683 JS的6种字符表示…
扩展运算符 ... 将数组转化成用逗号分隔的参数序列 * 扩展运算符背后调用的是遍历器接口(Symbol.iterator),如果一个对象没有部署这个接口,就无法转换. 应用 1. 合并数组 2. 将字符串转化成数组 3. 与解构赋值结合(如果用于数组赋值,只能放在参数的最后一位,否则报错) Array.from() 将类数组对象(array-like-object) 和 可遍历(iterable)对象转换成数组. Array.from() lets you create Arrays from…
ArrayBuffer ArrayBuffer对象.TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口.它们都是以数组的语法处理二进制数据,所以统称为二进制数组. 二进制数组由三类对象组成. (1)ArrayBuffer对象: 代表内存之中的一段二进制数据,可以通过“视图”进行操作.“视图”部署了数组接口,这意味着,可以用数组的方法操作内存. (2)TypedArray视图: 共包括 9 种类型的视图,比如Uint8Array(无符号 8 位整数)数…
前两篇文章主要介绍了类和对象.类的继承,如果想了解更多理论请查阅<ES6学习笔记(一):轻松搞懂面向对象编程.类和对象>.<ES6学习笔记(二):教你玩转类的继承和类的对象>,今天主要来分享关于如何用js面向对象的思维来实现tab栏的一些相关的功能. 要实现的功能分析 点击tab栏可以切换效果 点击+号,可以添加tab项和内容项 点击X号,可以删除当前的tab项和内容项 点击tab文字或者内容项文字,可以修改里面的字体内容 抽像对象: Tab对象 (增删改查功能)实现功能效果如下图…
ES6学习笔记:块级作用域 作用域分类 全局作用域 局部作用域 块级作用域 全局作用域示例 var i=2; for (var i = 0; i < 10; i++) { } console.log(i);//10 这里就出现了意料之外的结果,此种原因是变量提升造成过的 局部作用域示例 !(function () { console.log(b);//undefined var b = 2; })() 为什么会输出undefined,而不是报错? 此种也是变量提升造成的意料之外的结果,上面代码等…
---恢复内容开始--- 在学习ES6的块作用域和 let.const 之前,我们先来看看ES5以前的 var 关键字. var 关键字用于定义一个变量,通常我们会将其与变量的赋值合并为一条语句,就像下面这样(例1): var age = 30; 但实际情况是有些微妙的. 在JavaScript中,变量的定义与否,虽然不像强类型语言那样重要,但也还是有所不同的. 变量未定义,是一种未捕获类型的错误,输出的结果是变量未定义,同时终止后续脚本的执行,示例如下(例2): console.log(age…
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = function(){ console.log("say Hi!"); } document.getElementById("click_2").onclick = () => { let a = 1; let b = 2; console.log(a + b);…
学习参考地址1  学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也就是说,ES6就是ES2015. let, const, class, extends, super, arrow functions, template string, destructuring, default, rest arguments 这些是ES6最常用的几个语法,基本上学会它们,我们…
ES6学习笔记(2019.7.29) 目录 ES6学习笔记(2019.7.29) let和const let let 基本用法 let 不存在变量提升 暂时性死区 不允许重复声明 块级作用域 级作用域 ES6的块级作用域 块级作用域与函数声明 const 基本用法 本质 顶层对象 解构赋值 数组的解构 基本用法 默认值 对象的解构 基本用法 默认值 注意点 字符串的解构 数值布尔值的解构 函数参数的解构 圆括号问题 不能使用圆括号的情况 可以使用圆括号的情况 用途 for.for in.for…
<Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfInitialization.java // Demonstrates initialization order. // When the constructor is called, to create a // Tag object, you'll see a message: class Tag { Tag(in…
C++Primer第5版学习笔记(二) 第三章的重难点内容         这篇笔记记录了我在学习C++常用基本语法的学习过程,基本只记录一些重难点,对概念的描述不是一开始就详尽和准确的,而是层层深入的.第三章主要讲这么五个概念:       1.using声明,我知道挺多同学写代码练手都要在源文件前几句直接加using namespace std;然而using语句并不是什么情况都这么使用的,稍后我们将会看到详细的用法.  2.标准库类型string,和C味的字符数组有区别的string,到底…
原文:Windows phone 8 学习笔记(5) 图块与通知 基于metro风格的Windows phone 8 应用提到了图块的概念,它就是指启动菜单中的快速启动图标.一般一个应用必须有一个默认图块,还可以有若干个次要图块.另外,通知与图块的关系比较密切,我们可以通过在接受到消息时动态更新图块来达到适时的效果.我们本节把图块和通知放在一起讲. 快速导航:    一.图块    二.图块更新计划    三.本地通知    四.推送通知 一.图块 1)定义默认图块 默认图块只能在清单文件中定义…
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者…
HTTP协议学习笔记(二) 1.HTTP报文 HTTP报文:用于HTTP协议交互的信息.请求报文:请求端(客户端)的HTTP报文叫做请求报文.响应报文:响应端(服务端)的HTTP报文叫做响应报文. HTTP报文大致可分为报文首部和报文主体两块.两者最初由空行(CR+LF)来划分.通常,并不一定要有报文主体. 2.请求报文及响应报文的结构 请求报文和响应报文首部内容由以下数据组成. 请求行:包含用于请求的方法,请求URI和HTTP版本. 状态行:包含表明响应结果的状态码,原因短语和HTTP版本 首…
import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小工程,再用一种简单的方法把这些小工程连接在一起. 这有可能导致两个问题: 一方面js代码变得很臃肿,难以维护 另一方面我们常常得很注意每个script标签在html中的位置,因为它们通常有依赖关系,顺序错了可能就会出bug 在es6之前为解决上面提到的问题,我们得利用第三方提供的一些方案,主要有两种…
default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; val_2 = val_2 || 20; return console.log(val_1 + val_2); } add(); 而现在可以这么做 function add_1(val_1 = 5,val_2 = 10){ return console.log(val_1 + val_2); }…
为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口(Interface),yield则是生成器函数中表示 返回 或 继续 执行的关键字. 弄清楚这两个概念后,先看一个例子: function* fun(val) { yield 1*val; yield 2*val; yield 3*val; yield 4*val; return 5*val; }…
变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; var c = 3; ES6允许写成下面这样: 1 var [a, b, c] = [1, 2, 3]; 这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值,如果解构不成功,变量的值就等于undefined,下面是一些使用嵌套数组进行解构的例子: 1 2 3…
Vue.js学习笔记(二) 4.模块化开发 ES6模块化的导入和导出 我们使用export指令导出了模块对外提供的接口,下面我们就可以通过import命令来加载对应的这个模块了 首先,我们需要在HTML代码中引入两个js文件,并且类型需要设置为module import指令用于导入模块中的内容.比如main.is的代码 导出方法: var name = '小明'; var age = 18; var flag = true; function sum(num1, num2) { return n…
2016/4/22 23:19:44 Hibernate学习笔记(二) 1.1 Hibernate的持久化类状态 1.1.1 Hibernate的持久化类状态 持久化:就是一个实体类与数据库表建立了映射. 瞬时态 transisent:(临时态) 持久态 persistent 脱管态 detached:(离线态) 1.1.2 三种持久化对象的状态 Transient瞬时态:持久化对象没有唯一标识OID.没有纳入Session的管理. Persistent持久态:持久化对象有唯一标识OID.已经纳…
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 四.X-CART 框架 1.从用户前台了解x-cart功能 和我们用过的淘宝.京东等电子商城一样,具有以下的人性化功能: 所有的订单都存储于MySQL数据库,客户可以查询和浏览个人订单历史 整合的可定制的网店产品查询 实时订单跟踪 客户可以选择帐户登记也可以选择快速结账 快速结账通道模块 不注册禁止结账功能…