函数声明

Go语言学习笔记 - 第二章 程序结构(The Go Programming Language)

这一生的挚爱 提交于 2020-01-13 05:17:39
第二章 程序结构 2.1命名 划重点 函数名、变量名、常量名、类型名、语句标号和包名 以一个字母(Unicode字母)或下划线开头,跟任意数量的字母、数字或下划线,大写字母和小写字母是不同的。 关键字(25个) break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 预定义的名字 (30+个),这些不是关键字,可以再定义中重新使用它们 内建常量: true false iota nil 内建类型: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error 内建函数: make len cap new append copy close delete complex real imag panic recover 作用域:内部定义内部有效;外部定义包内有效,名字开头 大写 可在包外部可见。比如: fmt 的 Print 可以在 fmt

JavaScript 秘密花园 http://bonsaiden.github.com/JavaScript-Garden/zh/

五迷三道 提交于 2020-01-12 20:22:25
简介 JavaScript 秘密花园 是一个不断更新,主要关心 JavaScript 一些古怪用法的文档。 对于如何避免常见的错误,难以发现的问题,以及性能问题和不好的实践给出建议, 初学者可以籍此深入了解 JavaScript 的语言特性。 JavaScript 秘密花园 不是 用来教你 JavaScript。为了更好的理解这篇文章的内容, 你需要事先学习 JavaScript 的基础知识。在 Mozilla 开发者网络中有一系列非常棒的 JavaScript 学习 向导 。 译者注: 文中提到的 ES5 是 ECMAScript 5 的简写,是 ECMAScript 标准语言的下一版本,正在开发中。 JavaScript 是此标准语言的一个方言。 关于作者 这篇文章的作者是两位 Stack Overflow 用户, 伊沃·韦特泽尔 Ivo Wetzel (写作) 和 张易江 Zhang Yi Jiang (设计)。 贡献者 Caio Romão (拼写检查) Andreas Blixt (语言修正) 中文翻译 三生石上 此中文翻译由 三生石上 独立完成, 博客园 首发,转载请注明出处。 许可 JavaScript 秘密花园在 MIT license 许可协议下发布,并存放在 GitHub 开源社区。 如果你发现错误或者打字错误,请 新建一个任务单 或者发一个抓取请求。

前端学数据结构之栈

拥有回忆 提交于 2020-01-12 18:48:50
前面的话   学习数据结构和算法十分重要。首要原因是数据结构和算法可以很高效地解决常见问题,这对今后的代码质量至关重要(也包括性能,要是用了不恰当的数据结构或算法,很可能会产生性能问题)。其次,对于计算机科学,算法是最基础的概念。数组是计算机科学中最常用的数据结构,我们知道,可以在数组的任意位置上删除或添加元素。然而,有时候还需要一种在添加或删除元素时有更多控制的数据结构。有两种数据结构类似于数组,但在添加和删除元素时更为可控。它们就是栈和队列。本文将详细介绍栈 数据结构   栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。   在现实生活中也能发现很多栈的例子。例如,下图里的一摞书或者餐厅里堆放的盘子   栈也被用在编程语言的编译器和内存中保存变量、方法调用等 创建栈   下面将创建一个类来表示栈,先声明这个类: function Stack() { //各种属性和方法的声明 }   使用一种数据结构来保存栈里的元素。可以选择数组: let items = [];   接下来,为栈声明一些方法 push(element(s)):添加一个(或几个)新元素到栈顶 pop():移除栈顶的元素,同时返回被移除的元素 peek():返回栈顶的元素,不对栈做任何修改

ES6的新增特性

假装没事ソ 提交于 2020-01-11 14:25:41
目录 第一篇、开发环境搭建 第二篇、三种声明方式 2.1 var(全局声明) 2.2 let(局部声明) 2.3 const(常量声明) 第三篇、解构赋值 3.1 数组的解构赋值 3.2 对象的解构赋值 3.3 字符串的解构赋值 第四篇、对象扩展运算符和rest运算符 4.1 对象扩展运算符 4.2 rest运算符 第五篇、新增字符串 5.1 字符串模板 5.2 字符串查找 5.3 字符串的复制 第六篇、数字的操作 6.1 数字判断 第七篇、数组方法 7.1 Array.from() 7.2 Array.of() 7.3 find()实例方法 7.4 fill()实例方法 7.5 entries()实例方法 7.6 数组循环 7.6.1 for...of 第八篇、函数扩展和箭头函数 第八篇、函数和数组的查缺补漏 8.1 对象的函数解构 8.2 数组解构 8.3 in的用法 8.4 数组遍历 8.5 数组转为字符串 第九篇、ES6中的对象 9.1 对象的赋值 9.2 key值的构建 9.3 自定义对象 9.3.1 is() 9.3.2 assign() 第十篇、Symbol在对象中的作用 10.1 认识Symbol 10.2 Symbol在对象中的应用 第十一篇、Set和WeakSet数据结构 11.1 Set的增删查 11.2 Set的输出 11.3 WeakSet的声明 11.4

第5章:作用域与可见性

不问归期 提交于 2020-01-11 13:47:09
5.1 作用域与可见性 定义 (1)作用域:是标识符的有效范围; (2)可见性:标识符是否可以引用 源由 用法 简单例子 详解 1、函数原型的作用域:其作用域始于"(",结束于")"; 2、块作用域:块是一对花括号括起来的一段程序单元;其块中声明的标识符,其作用域从声明处开始,直到块结束的右花括号; 3、类作用域:可以将类看成是一组有名成员的集合,除个别例外,类作用域作用于特定的成员名,类及其对象有特殊的访问和作用域规则; 如:类X的一个成员M,在X的任何一个没有重新声明变量M的函数成员中,都可以访问到M 4、文件的可见性:理解为全局变量就行,在整个文件中都起作用; 4、作用域可见性的一般规则: (1)标识符应声明在先,引用在后; (2)在同一作用域中,不能声明同名的标识符; (3)如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见; (4)对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见; 进阶例子收集 5.2 对象的生存期 定义 对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止; 源由 用法 简单例子 详解 1、静态生存期:生存期与程序的运行期相同,用关键字static表示; 2、 进阶例子收集 5.3 数据与函数 定义 数据+算法=程序设计

C/C++中的const、static、inline、friend、template、virtual、异常机制等特性

徘徊边缘 提交于 2020-01-11 07:16:46
一、const const关键字的作用 (1)作用: 1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 3)在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值; 4)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量; 5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”。 const修饰变量 变量的值不能改变 const修饰指针 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量 指针常量:不能通过指针来修改变量的值。 常量指针:一直指向该变量,不能给该指针赋予其他地址 函数中使用const const修饰函数参数 表示参数不可变 若参数为引用,可以增加效率 const引用传递和函数按值传递的效果是一样的,但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效 const按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响

Vue学习一之vue初识

▼魔方 西西 提交于 2020-01-10 20:58:24
Vue学习一之vue初识 本节目录 一 Vue初识 二 ES6的基本语法 三 Vue的基本用法 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 vue初识   vue称为渐进式js框架,这个框架用来做前后端分离的项目,之前我们学习django,知道django是一个MTV模式的web框架,urls--views--templates,模板渲染通过后端的代码来实现数据的渲染,再加上前端一些简单的dom操作来完成网页的开发,当我们做一个复杂的大型的网页的时候,你会发现这种模式作起来会比较复杂,扩展起来也比较困难,因为前后端没有分离开,耦合性太高,牵一发而动全身,所以人们就开始想,如果能有专门的人来开发前端,专门的人来开发后端,前端页面就是前端语言来写,后端服务端代码就是后端服务端代码来写,两者之前只有数据的交流,那么以后页面在进行拓展,进行功能的更新的时候就会变得比较简单,因此vue就诞生了,之前我们前端页面拿到数据都是通过dom操作或者django的模板语言来进行数据的渲染的,有了前端框架vue,就不需要他们了,并且频繁的dom操作,创建标签添加标签对页面的性能是有影响的,那么直接数据驱动视图,将django的MTV中的T交给vue来写,也就是那个templates里面的内容,并且前端的vue拿到了T这部分的工作,MTV前身是MVC

let和const注意点

泪湿孤枕 提交于 2020-01-10 20:57:19
let 一、块级作用域 下面的代码如果使用 var ,最后输出的是 10 。 var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 10 上面代码中,变量 i 是 var 命令声明的,在全局范围内都有效,所以全局只有一个变量 i 。每一次循环,变量 i 的值都会发生改变,而循环内被赋给数组 a 的函数内部的 console.log(i) ,里面的 i 指向的就是全局的 i 。也就是说,所有数组 a 的成员里面的 i ,指向的都是同一个 i ,导致运行时输出的是最后一轮的 i 的值,也就是 10。 如果使用 let ,声明的变量仅在块级作用域内有效,最后输出的是 6。 var a = []; for (let i = 0; i < 10; i++) { a[i] = function () { console.log(i); }; } a[6](); // 6 上面代码中,变量 i 是 let 声明的,当前的 i 只在本轮循环有效,所以 每一次循环的 i 其实都是一个新的变量,所以最后输出的是 6 。你可能会问,如果每一轮循环的变量 i 都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript

C语言数据类型

安稳与你 提交于 2020-01-10 20:35:37
C语言关键字: 也称保留字,是C语言预先定义的、具有特殊意义的单词。 数据类型关键字(12个): (1)char:声明字符型变量或函数 (2)double:声明双精度变量或函数 (3)enum:声明枚举类型 (4)float:声明浮点型变量或函数 (5)int:声明整型变量或函数 (6)long:声明长整型变量或函数 (7)short:声明短整型变量或函数 (8)signed:声明有符号类型变量或函数 (9)struct:声明结构体变量或函数 (10)union:声明共用体(联合)数据类型 (11)unsigned:声明无符号类型变量或函数 (12)void:声明函数无返回值或无参数,声明无类型指针 控制语句关键字(12个): A循环语句 (1)for:一种循环语句(可意会不可言传) (2)do:循环语句的循环体 (3)while:循环语句的循环条件 (4)break:跳出当前循环 (5)continue:结束当前循环,开始下一轮循环 B条件语句 (1)if:条件语句 (2)else:条件语句否定分支(与if连用) (3)goto:无条件跳转语句 C开关语句 (1)switch:用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D返回语句 return:子程序返回语句 存储类型关键字(4个): (1)auto:声明自动变量一般不使用 (2

C++之继承与派生(3)

橙三吉。 提交于 2020-01-10 13:57:27
  大家都知道C#和C++重要的区别之一就是,C#支持单一继承和多接口继承,而C++则允许多继承。至于哪一个比较好,在这里就不去评价了。今天所要说的重点内容就是C++的多重继承以及虚基类。   1.前一节我介绍了有关单继承的内容,实际上,一个派生类可能会继承于两个或多了基类,那么这样的派生方法称为多基派生或多重继承。它声明的一般格式:   class 派生类名:继承方式1 基类名1, 继承方式2 基类名2, 继承方式3 基类名3, ...,继承方式n 基类名n   {     派生类新增的数据成员和成员函数;   } 在多重继承中,公有继承、保护继承以及私有继承对于基类成员在派生类中的访问属性与单继承的规则是相同的。同样的多重继承派生类的构造函数和析构函数又是如何定义呢?一般形式:   派生类名(参数总表):基类名1(参数子表1), 基类名2(参数子表2),...,基类名n(参数子表n)   {     派生类新增成员的初始化语句;   } 与单继承派生类构造函数一样,多继承下的派生类构造函数必须同时负责该派生类的所有基类构造函数的参数传递。且构造函数和析构函数的调用顺序和单继承是一样的(可参考 C++之继承与派生(2) ),先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么处于同一层次的各个基类构造函数的调用顺序是取决于声明派生类时所指定的各个基类的顺序