整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

搞懂JS模块各个写法

懂 Commonjs、AMD、CMD、UMD、ES Modules



先说Rollup是什么?

是一个打包的ES Module的工具;

Rollup 是一个 JavaScript 模块打包器,可以将小块代码编译成大块复杂的代码,例如 library 或应用程序。Rollup 对代码模块使用新的标准化格式,这些标准都包含在 JavaScript 的 ES6 版本中,而不是以前的特殊解决方案,如 CommonJS 和 AMD。ES6 模块可以使你自由、无缝地使用你最喜爱的 library 中那些最有用独立函数,而你的项目不必携带其他未使用的代码。ES6 模块最终还是要由浏览器原生实现,但当前 Rollup 可以使你提前体验

Rollup并不支持CommonJS和AMD的打包方式


CommonJS

CommonJS主要用于服务端,一个单独的文件就是一个模块,node.js为主要实践者。

提供支持:

  • module
  • exports
  • require
  • global

require 命令用于输入其他模块提供的功能

module.exports命令用于规范模块的对外接口,输出的是一个值的拷贝,输出之后就不能改变了,会缓存起来。

CommonJS 采用同步加载模块,而加载的文件资源大多数在本地服务器,所以执行速度或时间没问题。但是在浏览器端,限于网络原因,更合理的方案是使用异步加载。


AMD

采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。其中 RequireJS 是最佳实践者。

异步加载模块


CMD

CMD(Common Module Definition - 通用模块定义)规范主要是Sea.js推广中形成的,一个文件就是一个模块,可以像Node.js一般书写模块代码。主要在浏览器中运行,当然也可以在Node.js中运行。

  • TS:sea,js是什么?SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制。

它与AMD很类似,不同点在于:AMD 推崇依赖前置、提前执行,CMD推崇依赖就近、延迟执行


UMD

UMD 叫做通用模块定义规范(Universal Module Definition)。也是随着大前端的趋势所诞生,它可以通过运行时或者编译时让同一个代码模块在使用 CommonJs、CMD 甚至是 AMD 的项目中运行。未来同一个 JavaScript 包运行在浏览器端、服务区端甚至是 APP 端都只需要遵守同一个写法就行了。

它没有自己专有的规范,是集结了 CommonJs、CMD、AMD 的规范于一身,我们看看它的具


ES Modules

简称ESM,是 JavaScript 官方的标准化模块系统。

  • 它因为是标准,所以未来很多浏览器会支持,可以很方便的在浏览器中使用。(浏览器默认加载不能省略.js)
  • 它同时兼容在node环境下运行。
  • 模块的导入导出,通过import和export来确定。
  • 可以和Commonjs模块混合使用。
  • ES modules 输出的数值的引用,输出接口动态绑定,而 CommonJS 输出的是值的拷贝
  • ES modules 模块编译时执行,而 CommonJS 模块总是在运行时加载
import { name, github } from './demo.js';

console.log(name(), github());

document.body.innerHTML = `<h1>${name()} ${github()}</h1>`

总结

CommonJS 同步加载, AMD 异步加载, UMD = CommonJS + AMD , ES Module 是标准规范, 取代 UMD,是大势所趋。 Tree-shaking 牢记副作用。

要包括下面这些:

数据类型、判断方法、执行上下文、变量对象、活动对象原型、原型链作用域、作用域链闭包、垃圾回收机制、this指向、类和模块、继承、函数式编程、同步异步、JS正则表达式、事件模型、Ajax、跨域访问、DOM、BOM。

数据类型、判断方法

ECMAScript的基本数据类型有5种:Undefined、Null、Boolean、Number、String。

其中Boolean、Number、String属于原始类型,Undefined、Null属于原始值。

原始类型代表了各自类型的所有成员,原始值则代表了各自特殊类型的唯一成员。

ECMAScript的复合数据类型有1种:Object(对象类型)。

Object是一种复合值,它将很多值(原始类型/值或者其他对象)聚合在一起,通过属性的形式进行访问。

ECMAScript的特殊对象类型:Array、Function、Math、Date、JSON、RegExp、Error,每种类型都各自代表一种独立的类,不同的类实例拥有不同的类特性以及对应的操作方式。

ECMAScript常见数据类型划分方式:

1.原始类型、对象类型

2.值类型、引用类型

3.可变类型、不可变类型

4.可拥有方法类型、不可拥有方法类型精确区分数据类型的判断方法:Object.prototype.toString.call

执行上下文

JS的执行上下文可以理解为当前代码的执行环境,在执行JS程序时,每遇到一段JS可执行代码,都会创建一个可执行上下文。JS当中可执行代码分为三种:全局代码、函数代码、eval代码。所以一段JS程序必定会产生多个执行上下文,而JavaScript引擎则是以堆栈的形式来对其进行管理,也就是常说的函数调用栈。栈底是全局上下文,栈顶则是当前正在执行的上下文。例如:

执行上下文在函数调用栈中的顺序为(自底向上):globalStack => threeStack => twoStack => oneStack

特性

1.单线程

2.同步执行,只有栈顶的上下文处于执行中,其他上下文需要等待

3.全局上下文只有唯一的一个,它在浏览器关闭时出栈

4.函数的执行上下文的个数没有限制

5.每次某个函数被调用,就会有个新的执行上下文为其创建,即使是调用的自身函数,也是如此。变量对象、活动对象

在介绍变量对象与活动对象前,首先我们需要更深入的理解执行上下文的生命周期,执行上下文的生命周期分为两个阶段:

第一个阶段是创建阶段,每当JS引擎在执行一段可执行代码时,都会先进入创建阶段。该阶段会分别创建变量对象,建立作用域链,以及确定this的指向,作用域链和this指向会在后文阐述。所谓变量对象就是用于存储在执行上下文中定义的变量和函数声明,在当前上下文中每找到一个变量声明,就会在变量对象中建立一个同名的属性,每找到一个函数声明,就会建立一个以函数名命名的属性,属性值则为指向该函数所在内存地址的引用。这些预先建立好的属性以及属性值,存储着该上下文中所有的变量数据,为后续代码的执行奠定基础。

第二个阶段是执行阶段,当变量对象,作用域链,this指向都建立之后,执行上下文会进入到执行阶段。在该阶段中变量对象会转化为活动对象,此时活动对象中的属性都允许被访问,并且可以执行其他数据性的操作。

两者区别:

执行上下文处于创建阶段时,变量对象中的属性是不允许被访问的,但是在进入到执行阶段后,变量对象转化为活动对象,并且里面的属性都允许被外界访问。其实两者都属于同一个对象,只是处于执行上下文的不同生命周期而已。

原型、原型链

在JavaScript中,每一个对象都会和另一个对象产生关联,从另一个对象上继承属性,这里所指的另一个对象就是我们耳熟能详的原型。原型本身也是一个对象,其他对象可以通过它实现属性的继承,也可以将任何一个对象作为自身对象的原型。JS中的任何对象都有原型,除了原型链顶端的对象:Object.prototype

所谓原型链,就是由对象原型所构成的访问链,我称之为“原型继承链”。一个JS对象的原型指向其父类对象,而父类对象的原型又指向父类对象的父类对象,这种通过原型层层连接起来的关系就是原型链。

以下是几种获取原型对象的方法:

作用域、作用域链

说到作用域,就必须结合变量的访问权限来说明。一个变量的作用域就是在程序中定义变量的区域,它规定了执行程序如何对变量进行查找,也就是确定当前的执行代码对变量的访问权限。在ES5中有全局作用域、函数作用域、eval作用域,在ES6中新增了块级作用域。

作用域链,则需要结合函数的嵌套来说明。当定义一个函数时,它实际上创建了一个作用域节点,该节点上存储着当前作用域中的局部变量,并且该节点会挂载在作用域链的底端。在该函数中嵌套定义另一个函数时,同样会创建另一个函数作用域的节点,该节点同样也存储着当前函数作用域中的局部变量,在作用域链中会将该节点挂载在外层函数的节点之下。所以在进行变量访问时,会从自身节点开始查找,如果未找到变量的对应值,则会继续查找上一个节点。而由这一系列节点所串联起来的链就是我们所说的作用域链。

JavaScript中的函数采用静态作用域,也称词法作用域。当在执行函数调用时,不管何时何地执行函数,其中的变量在函数定义时就已经决定了,函数会从自身作用域节点开始,沿着作用域链向上访问变量的值。

注意:作用域链的顶端是全局作用域,作用域链在函数定义时就已经创建了。

闭包、垃圾回收机制

闭包,又一个老生常谈的话题,可以用一句话对之概括:有权访问另一个函数作用域内变量的函数都是闭包。例如:

这里返回的inner函数就是能够访问outer函数中变量的闭包,除inner函数之外的外部作用域都无法访问outer函数中的变量a。

闭包特性:

1.函数返回嵌套的函数形成闭包

2.闭包内部可以访问外部的参数和变量

3.外部参数和变量在被闭包引用时不会被垃圾回收机制回收

闭包优点:

1.可避免变量对全局的污染

2.允许函数私有成员的存在

3.允许变量长驻内存

闭包缺点:

由于变量常驻内存,增大内存使用量,使用不当很容易造成内存泄漏。

闭包应用场景:

1.采用函数引用方式的setTimeout调用

2.将函数关联到对象的实例方法

3.封装相关的功能集

JS垃圾回收机制原理

JavaScript中的垃圾回收,主要是一种针对程序执行环境中内存的管理机制,该机制最大限度的优化了JS程序对操作系统内存的使用。垃圾回收机制也同样非常容易理解:就是利用垃圾收集器,周期性的回收那些程序中,不被其他引用所指向的变量的内存资源。不被其他引用所指向的变量就是程序中不会再用到的变量,也就是生命周期结束的变量,这种变量多为局部变量,而全局变量只有在关闭浏览器或终止当前运行环境的情况下其生命周期才会结束。所以此时垃圾收集器所要做的就是周期性的检索程序中处于结束状态的变量,同时回收他们所占用的内存资源。

而闭包的使用则无疑会增加程序对内存资源的占用,因为在闭包中存储着对外部变量的引用,所以只要闭包中存储的外部引用未停止使用,那么外部变量就永远存在,且其所占用的内存资源无法被垃圾回收机制所释放。因此合理的使用闭包,能优化程序的执行效率及降低程序的资源占有率。

this指向

this的指向问题无疑是JavaScript语言中必须掌握的核心概念。上文提到,在执行上下文创建的阶段,就会建立this指向。而更细致的说,this的指向,是在函数被调用的时候确定的。

下面是this指向的四种场景:

1.如果一个函数中有this,但是它没有以对象方法的形式调用,而是以函数名的形式执行,那么this指向的就是全局对象。

2.如果一个函数中有this,并且这个函数是以对象方法的形式调用,那么this指向的就是调用该方法的对象。

3.如果一个函数中有this,并且包含该函数的对象也同时被另一个对象所包含,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一级的对象。

4.如果一个构造函数或类方法中有this,那么它指向由该构造函数或类创建出来的实例对象。

类和模块

类的概念

JavaScript是一种弱类型语言,其本身并不像Java等语言那样对数据具有很强的类型区分,所以为了能够具有面向对象的编码风格,以其独有的方式实现了类的机制。在JavaScript中,类的实现是基于原型(prototype)继承机制的,如果两个实例都从同一个原型对象上继承了属性,可以说它们是属于同一个类的实例。类让每一个成员对象都共享某些属性,这种属性共享的方式在编程中占有举足轻重的地位。

ES5中的类:在ES5中,类是由函数来定义的,定义类的函数称之为构造函数。一般这类函数会以首字母大写的形式出现,普通的函数和方法都是以小写字母开头,对象实例化时通过new关键字来调用构造函数。构造函数上挂载着一个prototype属性,该属性存放的是当前类的原型对象,原型对象是类的核心,用于为每一个实例对象提供公有属性。原型对象中还拥有一个constructor属性,用于指向当前类的构造函数。构造函数是类的“公共标识”,而原型对象是类的“唯一标识”。以下是一个类,用于表示点的坐标:

ES6中的类:在ES6中,类的表示就更具语义化,写法上更类似于传统的面向对象语言。它引入了class关键字作为类的标识,并将ES5中prototype的constructor属性直接作为其内部的构造函数,并且在定义类方法时不需要添加function关键字,类方法之间也不需要用逗号进行分隔。类中的静态方法和静态属性用static关键字表示,一旦类函数和类属性用static关键字标记后,实例对象将不会继承这些属性和方法,只能通过类本身来调用。同样用ES6中的类来表示上述的例子:

模块化

JavaScript模块化的历史由来已久,也并非小编用几行的篇幅就能一语带过,在这仅对它的特性及应用场景进行笼统的说明,如有对其原委感兴趣的读者,可以搜索其他更详细的相关资料。

先来说CommonJS,CommonJS模块化规范主要应用于服务器端编程,加载模块的方式属于同步加载,只有在加载完成之后才能执行后续操作。一个.js文件就是一个CommonJS模块,在服务器端的模块文件一般都保存在本地硬盘,所以加载速度较快。每一个模块都有自己的作用域,里面定义的变量、函数、类都是私有的,对其他文件不可见。NodeJS、webpack就是以CommonJS规范的形式来实现的。

CommonJS模块特点:

所有代码都运行在模块作用域,不会污染全局作用域。

模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。

模块加载的顺序,按照其在代码中出现的顺序。在浏览器环境中,对于模块的下载很大程度上取决于网速的快慢,因此极有可能出现长时间等待现象,从而阻塞浏览器的渲染。所以就必须采用异步模式(AMD、CMD)。AMD模块规范采用异步加载方式,主要用于客户端浏览器环境下,但既可用于浏览器端也可用于服务端,CMD则专注于浏览器端的模块化开发。

AMD和CMD的区别:两者的区别在于对模块的加载和执行方式不同,AMD会在加载完模块的同时去执行模块,从而拥有延迟低、效率高的特性;CMD则是加载完所有依赖模块后,再进入程序,遇到需要执行的模块才会执行相应的操作。

requireJS是基于AMD规范实现的模块加载器

seaJS是基于CMD规范实现的模块加载器

继承

上文说道,由于js本身并不像其他传统的面向对象语言那样,生来就具备类的概念。所以在实现继承的同时,需要用到js的原型及prototype机制或apply、call、bind方法来实现。这里直接上码,介绍几种常见的继承方式:

类式继承

原型链继承

继承

函数式编程

JavaScript并不是专门的函数式编程语言,但却能够应用函数式编程技术,像对象一样去操控函数。下面就例举一些JS函数式编程的典型应用:

使用非函数式的方式计算数组中元素的平均值和标准差

使用函数式的编程方式

同步异步

单线程是JavaScript语言的一大特点,也就是在同一时间只能做一件事。所谓同步,原意就是程序的执行顺序与书写顺寻保持一致;而异步,指的是程序并非按照书写的顺序来执行,会存在“跳过”执行的现象。

谈及JS异步,就不得不提两个改变执行顺序的基础函数:setTimeout和setInterval函数。这两个函数在执行时会被压入事件循环队列当中,在当前作用域下的所有程序都执行完成后,才会开始执行排列在事件循环队列当中的函数,所以这两个函数能够改变程序的执行顺序。来看例子:

JS正则表达式

正则表达式大家应该不会陌生,JavaScript中的正则表达式用RegExp类的实例对象来表示,可以使用RegExp()构造函数来创建,也可以用直接量表达式来创建。它的主要功能是用来描述或匹配一段符合某个语法规则的字符串,多用于在一段较长的文本中检索或替换那些符合模式的字符串内容,也经常用于用户的输入校验。例如,使用如下代码来解析一个URL:

事件模型

JavaScript的事件模型,是所有前端研发工程师必须必须必须弄清楚的一个基础核心概念!下面为了能让读者迅速回忆起这部分相关的理论知识,笔者将以关键词的形式进行阐述。

DOM事件流:当用户触发事件时,该事件首先会从最顶层的document对象开始,自顶向下沿着DOM树的结构逐层传播,直到触发事件的DOM节点对象。之后会从触发事件的DOM节点对象开始,自底向上逐层传播,最后返回到最顶层document对象为止。这就是整个事件流传播的过程。

事件捕获:从最顶层的document对象开始,自顶向下沿着DOM树的结构逐层传播,直到触发事件的DOM节点对象的过程。

事件冒泡:从触发事件的DOM节点对象开始,自底向上逐层传播,最后到达最顶层的document对象的过程。

阻止事件流传播:既可以阻止事件捕获阶段的传播,也可以阻止事件冒泡阶段的传播。在支持addEventListener()方法的浏览器中,调用事件对象的stopPropagation()方法阻止事件传播。在IE9之前,设置事件对象的cancelBubble属性为true来实现阻止事件进一步传播。

阻止事件的默认行为:在支持addEventListener()的浏览器中,调用事件对象的preventDefault()方法取消事件的默认操作。在IE9之前,设置事件对象的returnValue属性为false来阻止事件的默认行为。

事件委托/事件代理:利用事件冒泡的原理,将事件加到目标节点的父级节点上,触发执行效果。好处就是:(1)可以减少事件绑定的次数,利于提高性能。(2)新添加的元素还会有之前的事件。

Ajax、跨域访问

Ajax是浏览器专门用来和服务器进行交互的异步通讯技术,其核心对象是XMLHttpRequest,通过该对象可以创建一个Ajax请求。为了防止XSS攻击,浏览器对Ajax做了限制,不允许Ajax跨域请求服务器,就是只能访问当前域名下的url。

JS的跨域访问,就是在不同的域名下进行HTTP请求与响应。JSONP就是一种常用的跨域通信方式,他利用了脚本跨域能力来模拟Ajax请求。

JSONP原理:由于Ajax请求受到同源策略的限制,所以无法跨域访问数据。服务端需要拼接的回调函数及返回数据

注意:这里用callback参数字段将客户端需要执行的回调函数名传给服务端,服务端只需在封装好json数据后,根据该字段值动态创建同名的回调函数即可。

DOM

文档对象模型(document object model)是用来表示和操作HTML和XML文档内容的基础API。Document类型代表了一个HTML或XML文档,document对象则是用来保存整个web页面的dom结构,在页面上所有的元素最终都会映射为一个dom对象。对页面节点的操作也是通过document对象中的方法来实现的。

document对象中常用的Dom操作方法有:getElementById();getElementsByClassName();querySelector();getAttribute();等等。

BOM

浏览器对象模型(browser object model)是用于和浏览器窗口进行交互的对象,也可用于窗口与窗口之间的通信。它的核心对象是window,在window对象当中也提供了很多其他对象属性用于操作和管理浏览器的各个部分。常用的window对象属性有:

Location对象:表示该窗口中当前显示的文档的URL.。

History对象:用于将窗口的历史浏览记录用文档和文档状态列表的形式表示。

Navigator对象:该对象包含了浏览器厂商和版本信息。

Screen对象:它提供了有关窗口显示大小和可用的颜色数量信息。

常用的对话框也属于挂载在window对象上的方法:alert(); confirm(); prompt();

无知不是无辜,而是有罪。


在对谈性讳莫如深的大环境里,我国的性教育现状还有待提高,不少人抱怨根本无法获得完备的性知识,甚至就连满口说黄色笑话的男性在这方面,居然也是极为匮乏的,实在令人感到汗颜。


但是尽管如此,依旧有部分朋友想完善自我,提升自己的素养,却苦于无法寻到资源。


为了解决大家的烦恼,这里将会提供一些基础的性知识点和自学的渠道和方法。


01.

成年后我们必须知道的性教育、性知识


1、性教育包括传避孕知识、性心理知识、性生理知识、预防性病和艾滋病知识、性卫生知识、性道德知识。


2、男性下体有2个洞,是尿道(也是排精管道)和肛门。女性有3个,从上往下分别是尿道,阴道和肛门。


3、广义的性疾病有几十种,危害重的性疾病共六种。


其中国内公认的八种性病为:艾滋病、淋病、梅毒、尖锐湿疣、生殖器疱疹、软下疳、性病性淋巴肉芽肿、非淋菌性尿道炎。


另外,世界卫生组织,又将20多种通过性行为,引起的感染性疾病,列入性病范畴。


4、艾滋病,简称HIV,只有2种传播方式:母婴传播和性传播,潜伏期短则数月,长可达15年或以上,平均8~9年。


尖锐湿疣,简称HPV,是由人类乳头状瘤病毒感染人的泌尿生殖器以及肛门周围所引起的一种常见的性传播疾病,潜伏期为1-8个月,平均3个月。


一定要多了解尖锐湿疣的图片和病例,这是最常见的性疾病,这样可以帮我们判断对方是否有性疾病——前往微博“许超医生”主页。


结婚前婚检是有必要的。


5、男女都需要注意私处的卫生,尤其是女性容易感染,需要经常洗护私处,可借助洗护用品。


6、女性月经来临,可以用卫生纸或者卫生棉条。


7、孩子是从阴道生出来的,接吻不会引起怀孕。


8、可靠的避孕方法主要有避孕套、吃避孕药、输卵管和输精管包扎、宫内节育器。避孕套是最常用的方法,如果懂得正确使用避孕套,避孕成功率会在98%左右。


9、不太安全的避孕方法有体外射精、安全期避孕、紧急避孕药。


10、在临床上,建议女性紧急避孕药一年最多只能服用三次。经常吃紧急避孕药对女性身体危害很大,可能会导致月经不调、乱卵巢萎缩、怀孕困难,还会出现一些不良反应。



11、性教育如果只把huang片作为唯一获取的渠道,这个人是非常可悲而匮乏的。


12、色情和性爱是有区别的,不能混为一谈。


浏览器经常弹出一些色情广告,经常看一些色情视频与动画动漫,其画面都会对人在精神上产生很大的刺激,产生多巴胺,多看会上瘾。


甚至需要找更多更刺激的动作片才能满足,阈值变高,不利于心理健康。


可以看看【TED演讲:伟大的色情实验-哔哩哔哩】 https://b23.tv/gY5adRT


https://m.toutiao.com/is/rNUJTXN/ - 色情片,是怎样伤害你的大脑的?-


13、huang片中大部分内容并不适合作为爱情男女参考借鉴,因为它是有着很明显的迎合男性市场、激发消费的导向,表演成分过大,女性表现得像工具人,没有爱的感觉。一般女性看了会感到不受尊重,羞耻或者恼怒。


如果把这些视频中当真并且不能自拔,那么已经在猥琐男(女)的路上越跑越远了。


14、同房之前,不论男女都要清洗会阴,洗掉脏物和残留的尿液,男性如果包皮过长还应该将包皮垢里面的污垢清洗干净。


同房时保持床铺、床单的干净。同房之后要及时排尿,男女双方都要将外阴用温开水,及时擦干净。


如果不清理的话,会发生尿路交叉感染的情况,很快就会造成双方排尿困难,膀胱控制力下降。


15、人工流产对身体的危害很大,有子宫内膜损伤、感染、贫血等。药物流产也有伤害。


16、一般在同房或者排卵之后10-14天,能知道自己是否怀孕了。初步可用测试怀孕的试纸,准确率比较高。后续可进行血液检测、B超检查。


17、自慰并不可耻,男女均可,没有女性不能自慰的说法,男性也不必过于有负罪感。但不可以过于频繁,如果上瘾,会严重影响日常生活和健康。


18、性生活频率多少是最好?可参考性爱频率公式:性爱频率=年龄的首位数×9。即用自己年龄的十位数乘以9,所得乘积的十位数即为一个性爱周期所持续的天数,而个位则为应有的性爱频率,要想充分享受高质量的性生活,需要掌握科学的性知识和性方法。


这个公式适用于20岁以上的成年人。例如一位25岁的人,他(她)的性爱公式为2×9=18,18是10和8的组合,也就是说适合他(她)的性爱频率为10天内过8次性生活,超过个这频率就过于频繁,可能引起身体不适了。


一个65岁的人,则是6×9=54,取54的十位数,也就是50天4次。


国内医生建议,若是年轻人且身体状况较好,通常建议可一周进行2-3次同房,而对于年纪较大或者体质欠佳者,则建议一周1-2次即可。


19、要想判断性生活有无过度,可根据性交后第二天有无局部或全身的不适来判断。


比如性生活后第二天,倦怠乏力、头晕目眩、气短心跳、神态憔悴、形体消瘦、面色苍白等,出现影响体能的症状,甚至影响工作和生活,


或者感到会阴或小腹存在疼痛、酸胀等不适,前列腺局部有充血、水肿、炎症等情况,


则可认为性生活过度,需要减少性生活的频率。


20、性瘾又叫性高潮瘾,全称性爱上瘾症,是指个体出现强烈的、被迫的连续或周期性的性冲动行为,如果这些性冲动得不到满足,就会产生焦虑不安的痛苦感觉。



21、性倾向有三种:异性恋、同性恋、双性恋。


22、强奸普通成年妇女,处三年以上十年以下有期徒刑。强奸未成年少女很有可能处十年以上有期徒刑、无期徒刑或者死刑。强奸男子,在中国不叫强奸罪,叫侮辱罪。


23、适当的性生活对身体健康有益,甚至还可以降低发病率,增加长寿的可能。


性爱不仅仅指性交,它其实包括温柔的抚摸、亲吻、前戏、器官互动,是可以带着情感融入的性行为,有激情,有温柔,有情趣,但不是粗鲁、猥琐、变态、无情。


24、过度性生活对人体不利,要清心寡欲,平日节欲,节省精力和体力,才有可能在事业和学业上取得成功。不可过于沉迷房事。


曾仕强先生曾经说过,人活着的意义,本就是一生寻找人类和动物那细微的不同之处。人似乎和原始动物没有什么区别,都是原始欲望驱动的,但我们依旧要人自己找出那一点点不同之处。


02.


下面是一些可供学习性知识的网站、书籍等渠道。


1、性教育网站

(1)大型性教育科普网站Pornhub

(2)知性(http://knowsex.net)国内的一家性教育网站

(3)Archive for Sexology

号称“世界最大的人类性学网站”,偏学术向的医学资料库。http://www.sexarchive.info/CH/home.htm

(4)香港特区教育局 性教育

香港特别行政区教育局的性教育专栏,资源也很多,以粤语为主。内地访问不畅。

https://www.edb.gov.hk/tc/curriculum-development/4-key-tasks/moral-civic/sea/sea.html

(5)《中国性科学》杂志,网站 http://www.zgxkx.com/

(6)《女性健康》美国杂志,网站

http://www.womenshealthmag.com/


2、电影、电视剧

(1)《活色生香》导演佩德罗·阿莫多瓦。

这一部专讲灵肉合一,什么叫做爱的精彩电影。一边讲什么是爱,一边专门治疗自以为是、目中无人的直男癌。豆瓣评分7.6

(2)《17.3 about a sex》日本电视剧,豆瓣9.0分高分。

有人评价,音乐、科普、教育、三观等,无论从哪种角度都想给满分。每集不到30分钟,一共9集的小短剧,却集齐了男性凝视、无性恋、性病、自慰、泛性恋、性安全、自我认同和社会认同等多方面的议题。


(3)《下辈子我再好好过》

撕开遮羞布,尊重人性而不该泯灭人性。

(4)《如果早知道男生也会被性侵》

(5)《sex education》也叫《性爱自修室》

(6)《21世纪性爱指南》

(7)《大学女生的性生活》

(8)《好想做一次》


3、书籍

儿童性科普书籍:

《身体密码》

《青春期教育》(初级中学课本)

《她来了请准备》

《重要的性》

《爱与生命》

成人的

《性健康》科学技术文献出版社

《性的知识》人民卫生出版社

《性生活常识必读全书》中国妇女出版社

《男女结婚医学手册:新婚必读 》性教育夫妻生活新婚必备性书籍

《新婚夫妻保健知识问答 》内容目录如下图



《艾滋病防治88问》内容目录如下图

《婚前准备 新婚保健 备孕优生三部曲 》

《解决女性身体烦恼一本通》内容目录如下图

《调情学》[美]琼·史密斯

《诱惑的艺术》

《爱的艺术》

《中国性史图鉴》

《男女性爱知识大全》

《书中秘本》作者:周顺成(房中术)内容目录如下图

《夫妻前戏的技巧》

《性高潮的科学》作者:胡佩诚 人民卫生出版社 两性健康学术交流

《现代夫妻性生活1000问》

《性爱指导》

《经典/阴阳、房事、双修 中国传统两性养生文化 》作者:郝勤著

《女性阴部健康特别指南》 作者:谢非编 北京:中国妇女出版

《性学三论》作者:弗洛伊德

《爱与婚姻》 作者:郎景和 湖北科学技术出版社

《好的婚姻要守护财产和爱:升级增订版》给中国人的婚姻财产守护指南

《海蒂性学报告》(全三册)

《金赛性学报告》

《性学观止》

《亲密之爱》 [美] 克利福德•彭纳 乔伊斯•彭纳

《性心理学》

《同性恋亚文化》李银河

《前戏技巧》

《性爱指导》

《婚前性行为》

《性爱实战指南》

《性爱基础知识》

《懒女孩的性指南》

《自慰:一种巨大恐惧的历史》

《孤独的性:手淫文化史》

《生命的不可思议:胡因梦自传》谭崔式的性爱

《胡因梦的性成长之路》胡因梦梳理了她的六段性生活


各位有兴趣的还可以查看性教育调查报告和相关学术文献


4、性学研究的先驱人物:

国内

(1)张竞生

民国第一批留洋(法国)博士,北京大学哲学系教授,率先提出计划生育,出版《性史》

(2)李银河

中国第一位研究性的社会学家,自由主义女性主义者,出版《性社会学》、《中国人的性爱与婚姻》

(3)潘绥铭

称为“中国性学第一人”,他主要从事社会学研究方法、性社会学和性别人类学研究。出版《中国性现状》《性,你真的懂了吗?》《中国性学百科全书——性社会学卷》《中国大学生的性行为,1991-1997》

国外

(4)威廉·马斯特(William H.Masters)

美国妇科医生、人类性研究和性治疗领域的先驱


(5)阿尔弗雷德·金赛

美国生物学家及性学家,掀起了一场性的革命。


5、性教育博主

(1)微博 “许超医生”

(2)微博“我叫皮小徐”

(3)微博“曾博士”

(4)哔哩哔哩 “硬糖视频”

(5)“妇产科女司机飒姐”

可以去这几个博主那里查看他们发布的作品了解学习噢,都是做的很好的科普。


以上就是所有的整理了,我也算是为中国的性教育进程尽一点微薄之力了,希望对你有帮助哦,有兴趣的伙伴可以收藏起来哦!不谢。