ECMAScript

深入理解JS:执行上下文中的this(一)

时光怂恿深爱的人放手 提交于 2020-08-05 05:15:38
目录 执行上下文与执行上下文栈 this 全局环境 函数环境 总结 参考 1.执行上下文与执行上下文栈 (1)什么是执行上下文? 在 JavaScript 代码运行时,解释执行全局代码、调用函数或使用 eval 函数执行一个字符串表达式都会创建并进入一个新的执行环境,而这个执行环境被称之为执行上下文。因此执行上下文有三类:全局执行上下文、函数执行上下文、eval 函数执行上下文。 执行上下文可以理解为一个抽象的对象,如下图: Variable object:变量对象,用于存储被定义在执行上下文中的变量 (variables) 和函数声明 (function declarations) 。 Scope chain:作用域链,是一个对象列表 (list of objects) ,用以检索上下文代码中出现的标识符 (identifiers) 。 thisValue:this 指针,是一个与执行上下文相关的特殊对象,也被称之为上下文对象。 (2)什么是执行上下文栈? 在全局代码中调用函数,或函数中调用函数(如递归)等,都会涉及到在一个执行上下文中创建另一个新的执行上下文,并且等待这个新的上下文执行完毕,才会返回之前的执行上下文接着继续执行,而这样的调用方式就形成了 执行上下文栈 。 示例代码: function A() { console.log('function A') B() }

Js-01. 语法、关键保留字、变量

半腔热情 提交于 2020-08-04 19:10:34
ECMA 是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会。欧洲计算机制造商协会是制定信息传输与通讯的国际化标准组织。 ECMAScript 是ECMA制定的标准化脚本语言。 目前 JavaScript 使用的ECMAScript版本为ECMAScript-262。 一、使用javascript 在html或xml头部里 <script type="text/javascript" src="demo1.js"></script> 二、语法 1、区分大小写: 包括变量、函数名和操作符。 2、标识符: 就是指变量、函数、属性的名字,或者函数的参数。 注:第一字符必须是一个字母、不能使用关键字、保留字。如:mybook11 3、注释: ECMAScript 使用C 风格的注释,包括单行注释和块级注释。 // 单行注释 /* * 这是一个多行 * 注释 */ 4、字面量或直面量: 所有直接量(字面量),就是程序中直接显示出来的数据值。 100 //数字字面量 '李世明' //字符串字面量 false //布尔字面量 /js/gi //正则表达式字面量 null //对象字面量 在ECMAScript 第3 版中,像数组字面量和对象字面量的表达式也是支持的,如下: {x:1, y:2} //对象字面量表达式 [1,2,3

深度克隆从C#/C/Java漫谈到JavaScript真复制

北慕城南 提交于 2020-08-04 16:21:01
如果只想看js,直接从JavaScript标题开始。 在C#里面,深度clone有System.ICloneable。创建现有实例相同的值创建类的新实例 克隆原理 值类型变量与引用类型变量 如果我们有两个值类型的变量,将其中一个变量的值赋给另一个,实际上会创建该值的一个副本,这个副本与原来的值没有什么关系 ——这意味着改变其中一个的值不会影响另一个变量的值。 如果是两个引用类型的变量,其中一个变量的值赋给另一个的话(不包括string类型,CLR会对其有特殊处理),并没有创建值的副本,而是使两个变量执行同一个对象 ——这意味着 改变对象的值会同时影响两个变量 。要真正地创建引用类型的副本,我们必须克隆(clone)变量指向的对象 。 C# 深度克隆 实现ICloneable接口使一个类型成为可克隆的(cloneable),这需要提供Clone方法来提供该类型的对象的副本。Clone方法不接受任何参数,返回object类型的对象(不管是何种类型实现该接口)。所以我们获得副本后仍需要进行显式地转换。 实现ICloneable接口的方式取决于我们的类型的数据成员。 如果类型仅包含值类型(int,byte等类型)和string类型的数据成员, 我们只要在Clone方法中初始化一个新的对象,将其的数据成员设置为当前对象的各个成员的值即可。事实上,object类的

还搞不懂闭包算我输(JS 示例)

主宰稳场 提交于 2020-07-28 19:31:18
闭包并不是 JavaScript 特有的,大部分高级语言都具有这一能力。 什么是闭包? A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment ). 这段是 MDN 上对闭包的定义,理解为:一个函数及其周围封闭词法环境中的引用构成闭包。可能这句话还是不好理解,看看示例: function createAction() { var message = "封闭环境内的变量"; return function() { console.log(message); } } const showMessage = createAction(); showMessage(); // output: 封闭环境内的变量 这个示例是一个典型的闭包,有这么几点需要注意: showMessage 是 createAction 执行后从中返回出来的一个 函数 。 createAction 内部是一个封闭的词法环境, message 作为该封装环境内的变量,在外面是绝不可能直接访问。 showMessage 在 createAction 外部执行,但执行时却访问到其内部定义的局部变量

Javascript 语法认识

一世执手 提交于 2020-07-28 18:46:23
javascript语法基础认识 主题 javascript简史; 1995年,由Netscape ( 网景)公司的Brendan Eich开发出来的。 借用了当时一个业界非常流行的词语java,于是更名为javaScript.后来微软进入浏览器行业。 为了统一语法标准,1997 年,JavaScript 1.1 作为一个草案提交给欧洲计算机制造商协会(ECMA),第 39 技术委员会(TC39)被委派来“标准化一个通用、跨平台、中立于厂商的脚本语言的语法和语义,由来自 Netscape、Sun、微软、Borland 和其他一些对脚本编程感兴趣的公司的程序员组成的 TC39 锤炼出了 ECMA-262,该标准定义了名为 ECMAScript 的全新脚本语言。 1、javaScript概述; javascript是一种基于 对象的 , 事件驱动的 , 跨平台的 ,客户端脚本语言; javascript能对页面进行渲染,让页面有行为。让页面动起来,与后台数据进行交互。 2、javascript组成部分; ECMA:语法规范; BOM:B:document ( 浏览器 ) O:object ( 对象 ) M:module (模型 ); DOM:D:browser (文档 ); 3、js 和 H5 的关系 HTML可以看作就是js,html很多标签都依赖的js的API实现; 4

你不知道的 WeakMap

半城伤御伤魂 提交于 2020-07-28 10:06:22
相信很多读者对 ES6 引入的 Map 已经不陌生了,其中的一部分读者可能也听说过 WeakMap。既生 Map 何生 WeakMap?带着这个问题,本文将围绕以下几个方面的内容为你详细介绍 WeakMap 的相关知识。 一、什么是垃圾回收 在计算机科学中,垃圾回收(Garbage Collection,缩写为 GC)是指一种自动的存储器管理机制。当某个程序占用的一部分内存空间不再被这个程序访问时,这个程序会借助垃圾回收算法向操作系统归还这部分内存空间。 垃圾回收器可以减轻程序员的负担,也减少程序中的错误。 垃圾回收最早起源于 LISP 语言,它有两个基本的原理: 考虑某个对象在未来的程序运行中,将不会被访问; 回收这些对象所占用的存储器。 JavaScript 具有自动垃圾回收机制,这种垃圾回收机制原理其实很简单:找出那些不再继续使用的变量,然后释放其所占用的内存,垃圾回收器会按照固定的时间间隔周期性地执行这一操作。 (图片来源:Garbage Collection: V8’s Orinoco) 局部变量只有在函数执行的过程中存在,在这个过程中,一般情况下会为局部变量在栈内存上分配空间,然后在函数中使用这些变量,直至函数执行结束。垃圾回收器必须追踪每个变量的使用情况,为那些不再使用的变量打上标记,用于将来能及时回收其占用的内存,用于标识无用变量的策略主要有引用计数法和标记清除法。

基于web的图书管理系统设计与实现

限于喜欢 提交于 2020-07-28 03:56:19
原文链接: 基于web的图书管理系统设计与实现 系统演示链接: 点击这里查看演示 01 系统简述 图书管理系统就是利用计算机,结合互联网对图书进行结构化、自动化管理的一种软件,来提高对图书的管理效率。本系统采用Java+Servlet+Jsp 的方式实现基于web的图书管理系统。 02 开发工具及相关技术 2.1 Java技术 Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台。有许多应用程序和 Web 站点只有在安装 Java 后才能正常工作,而且这样的应用程序和 Web 站点日益增多。Java 快速、安全、可靠。从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java 无处不在。 2.2 HTML、css、javascript技术 HTML的英文全称是 Hypertext Marked Language,即超文本标记语言。HTML是由Web的发明者 Tim Berners-Lee和同事 Daniel W. Connolly于1990年创立的一种标记语言,它是标准通用化标记语言SGML的应用。用HTML编写的超文本文档称为HTML文档,它能独立于各种操作系统平台(如UNIX, Windows等)。使用HTML语言,将所需要表达的信息按某种规则写成HTML文件,通过专用的浏览器来识别,并将这些HTML文件“翻译

什么是JavaScript 的闭包???

孤人 提交于 2020-07-28 02:45:01
目录 1 计数器问题 2 JS闭包 3 闭包的用处 4 闭包导致的一些问题 4.1 第一:使用更多的闭包 4.2 第二种方法:使用了匿名闭包 4.3 第三种方法:使用用ES2015引入的let关键词 4.4 第四种方法:使用 forEach()来遍历 5 性能 思考: Javascript的闭包是指一个函数与周围状态(词法环境)的引用捆绑在一起(封闭)的组合,在JavaScript中,每次创建函数时,都会同时创建闭包。 闭包是一种保护私有变量的机制,在函数执行时形成私有的作用域,保护里面的私有变量不受外界干扰,即形成一个不销毁的栈环境。 阅读本文前需要了解JS局部变量和全局变量。 不清楚的可以看我的上篇文章: https://blog.csdn.net/qq_23853743/article/details/106946100 1 计数器问题 如果你想要统计一个数值,你需要定义一个变量counter,这时你可以使用全局变量。实现代码如下: var counter = 0; function add() { counter += 1; } add(); add(); add(); console.log(counter); // 计数器现在为 3 上边的代码虽然可以实现计数, 但有一个大问题,那就是页面上的任何脚本都能改变计数器,这显然不是我们想要的,我们只想让特定的函数(例如

非计算机专业学习前端开发有前途吗?现在前端开发行情怎么样?

一个人想着一个人 提交于 2020-07-25 12:07:58
对于学习前端开发有前途吗?行情怎么样,好就业吗?这样的问题相信都看了很多很多,每个人的回答都有些差别。但是唯一的一点肯定的,学习前端的前景是很不错的。 接下来,来跟大家分享一下2020年Web前端的发展趋势如何?熟悉web的小伙伴们都了解,自2018年是前端技术的发展相对稳定的一年,就前端主流技术框架的发展而言,前几年里发展极快,在填补原有技术框架空白和不足的同时也渐渐趋于成熟。 未来前端在已经趋向成熟的技术方向上面将会慢慢稳定下来,并进入迭代优化阶段,例如语言标准、前端框架等。 那么Web前端的发展趋势如何?让我们一起来看一看吧~ 1.新规范的更新与稳定 前端新标准和草案在不断更新,HTML、CSS、Javascript标准也在渐渐完善,尽管这些新的规范最终会淘汰旧的规范,新的项目也会以最新的标准作为开发依据,但要完全废弃旧规范,还需要一段时间。 目前前端三层结构实现已经形成了HTML5、CSS3、《Ecmascript 6》标准规范,后面的新变化也会越来越小,这就表明了目前前端项目实践规范将会相对稳定一段较长的时间,后面的修改不会像之前一样具有颠覆性。 2.框架技术趋于稳定 从前端应用开发框架上来看,先后经历了DOM API、MVC、MVP、MVVM、Virtual DOM、MNV*阶段,逐步解决了前端开发效率、设计模式、DOM交互性能的问题。 这些问题处理完成后

python 正则表达 (Json 反序列化 与 序列化)

烂漫一生 提交于 2020-07-25 09:50:07
一.反序列化 Step 1.将json数据转换成python数据结构 python 是何如和Json数据进行交互以及操作,Json 的载体是字符串,放到python它就是一个str python专门提供一个模块叫json模块,json模块下有一系列的方法可以帮助我们操作json数据 json模块下面有一个方法叫 json.loads,json.loads可以将json字符串转换成python对应的数据结构 student的类型是dict,也就是字典类型. student打印的值基本和json字符串是一样的,但本质上打印的字典类型,而不是字符串 . 这段json字符串'{"name":"qiyue","age":18}' 在javascript里面表示的是对象的格式.但到python里面使用json.loads把它转换成了字典. 对于同样的json字符串来说,不同的语言有可能把json字符串会变成不同数据类型,其他语言可能就不是转换字典类型,有可能转换成另外的数据结构,例如哈希列表等等,这都是不确定的. 对于json字符串它对应到python是dict字典这样的一种形式.如果json字符串对应到json的数据结构来说,其实它表示的是json object,也就是json的一个对象.但是json字符串转到python的时候,python是用dict字典的方式来承载这样的一个对象