个人学习笔记——Javascript基础学习

JS基础性学习笔记(一)

跳过JS的历史回顾,感兴趣可以从网上搜索一下

###JS了解

虽然JavaScript和ECMAScipt基本上是同义词,但是JavaScript远远不限于ECMA-262所定义的那样,完整的JavaScript的实现包括以下几个部分

  • 核心(ECMAScript)
  • 文本对象类型(DOM)
  • 浏览器对象类型(BOM)

ECMAScript,即ECMA-262 定义的语言,并不局限于web浏览器。事实上这门语言没有输入是色儿方法。ECMA-262将这门语言作为一个基准定义,一边在他之上再构建更为稳定的脚本语言。Web浏览器只是ECMAScript实现可能存在的一种宿主环境,宿主环境提供ECMAScript的基准实现和与环境交互必须的拓展。拓展(比如DOM)使用ECMAScript核心类型和语法,提供特定与环境的额外功能。其他宿主环境还有服务器端JavaScript平台Node.js和即将被淘汰的Adobe Flash。
如果不涉及浏览器,ECMA-262到底定义了什么?在基本层面他描述了这门语言的语法、类型、语句、关键字、保留字、操作符、全局变量。
ECMAScript只是对实现这个规范描述的所有方面的一门语言的称呼
DOM 文档对象模型(Document Object Model)是一个用用变成的接口(API)用于在HTML中使用扩展的XML。DOM将整个页面抽象为一组分层节点。
DOM文档树
DOM通过创建表示文档的树,让开发者可以随心所欲的控制网页的内容和结构。是有DOM API,可以轻松地删除、添加、替换、修改节点。
BOM 浏览器对象模型API,用于支持访问和操作浏览器的接口。使用BOM,开发者可以操控浏览器显示页面之外的部分。总体来说,BOM主要针对浏览器窗口和子窗口,不过人们通常会把任何特定于浏览器的扩展都归于BOM的范畴内。H5以正式规范的的形式涵盖了尽可能多的BOM特性,在此之前,是没有标准的,每个浏览器实现的都是自己的BOM。

###JS的书写位置

》》JS 有3种书写位置,分别为行内、内嵌和外部。

1–行内式

<input type="button" value="点击" onclick="alert('Hello World')" />
  • 以将单行或少量 JS 代码写在HTML标签的事件属性中(以 on 开头的属性),如:onclick
  • 注意单双引号的使用:在HTML中我们推荐使用双引号, JS 中我们推荐使用单引号
  • 特殊情况下使用
    2–内嵌式
 <script>
 alert('Hello World~!');
 </script>
//可以将多行JS代码写到 <script> 标签中
// 内嵌 JS 是学习时常用的方式

3–JS外部

<script src="my.js"></script>
  • 利于HTML页面代码结构化,把大段 JS代码独立到 HTML 页面之外,既美观,也方便文件级别的复用
  • 引用外部 JS文件的script 标签中间不可以写代码

要嵌入行内JavaScript代码,直接将代码放在

<script>
	function sayHi(){
		console.log('Hi!!');
	}
	
</script>

包含在<script>中的代码会被从上到下解释。在<script>元素的代码被计算机完成之前,页面其余内容不会被加载,也不会显示。
要包含外部文件中的JavaScript,就必须使用src属性。这个属性的值是一个URL,指向包含JavaScript代码的文件。

###标签位置

过去,所有的<script>元素都被放在页面的herader标签内,这种做法的目的是把外部的css和js文件都集中放在一起。不过把所有的JS文件都放在·header·里也意味着把所有的JavaScript代码都下载、解析和解释完成后,才能开始渲染页面(页面在浏览器解析到body的起始标签是开始渲染)。对于需要很多JS的页面,这会导致页面渲染的明显延迟,在此之前浏览器的窗口是 完全空白的,为解决这个问题,现代web应用程序通常将所有的JS引用放到<body>元素中的页面内容后面。这样页面会在处理JS代码之前完全渲染页面,用户会感觉到浏览器显示空白页面的时间短了。

<body>
	<-----页面内容---->
	<script src="example1.js"></script>
</body>

推迟执行脚本
此外,<script>元素定义了一个defer的属性。这个属性表示脚本脚本在执行时不会改变页面的结构。因此这个脚本完全可以在整个页面解析完之后在运行。只对外部脚本才有效。
异步执行脚本
H5为<script>定义了async属性从改变脚本处理方式上看,asyncdefer类似,同时他们都是 只适用于外部脚本。都会告诉浏览器立即开始下载。但是标记为async的脚本并不能保证能按照它们出现的次序执行。


大多都是了解的知识,下一篇,再整理语言基础吧


版权声明:本文为m0_59684224原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。