JavaScript高级程序设计学习笔记(2)

在HTML中使用JavaScript

一、引用方式
1、内部引用:

<script type="text/javacript"> </script>

注:只需要指定type属性
2、外部引用:

<script type="text/javascript" src="example.js"></script>

二、标签的位置
元素内部的代码将被至上而下依次解释。在浏览器对元素内部的所有代码求值完毕之前,页面中的其余内容都不会被浏览器加载或显示。所有一般放在body之前加载。
三、延迟脚本和异步脚本
1、延迟脚本:defer属性表明脚本在执行时不会影响页面的构造,脚本会被延迟到整个页面都解析完毕后再运行

<script type="text/javacript" defer="defer" src="exaple1.js"></script>

注:
(1)、只适用于引用外部文件。
(2)、HTML5规范要求脚本按照他们出现的先后顺序执行,因此当存在两个延时脚本时,第一个延迟脚本会优先于第二个延迟脚本执行,而这两个脚本会优先于DOMContentLoaded时间触发前执行
2、异步脚本:async 不让页面等待两个脚本下载和执行,从而异步加载页面其他内同
注:
(1)、只适用于引用外部文件
(2)、与defer不用,如果存在两个脚本文件,第二个脚本文件可能会在第一个脚本文件之前执行。异步脚本一定会在页面的load事件前执行,但可能会在DOMContentLoaded事件触发之前或之后执行。
小结:
(1)所有元素都会按照它们在页面中出现的先后顺序被解析。在不使用defer和async属性的情况下,只有在解析完前面元素的代码之后,才会开始解析后面元素中的代码
(2)使用defer属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定他们的顺序执行
(3)使用async属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照他们在页面中出现的顺序执行。
(4)使用<noscript元素可以指定在不支持脚本的浏览器中显示替代内容。但在启用了脚本的情况下,浏览器不会显示<noscript元素中的任何内容
四、浏览器加载顺序
随着页面的加载,在默认情况下,浏览器会按照脚本在HTML中出现顺序依次对每个脚本进行下载,解析和执行。在处理脚本的过程中,浏览器既不会下载该script元素出现的内容,也不会呈现这些内容。这成为阻塞行为。

变量、作用域和内存问题

一、Javascript变量可以用来保存两种类型的值:
1、基本数据类型:Undifined、Null、Boolean、Number、String
2、引用对象类型
特点:
基本类型值在内存中占据固定大小的空间,被保存在栈内存中
引用类型的值是对象,保存在堆内存中
从一个变量向另一个变量复制基本类型的值,会创建这个值的一个副本
包含引用类型值得变量实际上包含的不是对象本身,而是指向该对象的指针
从一个变量向另一个变量复制引用类型的值,复制的是指针,因此两个变量最终都指向同一个对象
确定一个值是那种基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。
二、变量的执行环境
所有的变量都存在一个执行环境(也称为作用域),这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量。
1、环境有全局执行环境(全局环境)和函数执行环境之分;
2、每次进入一个新执行环境,都会创建一个用于搜索变量和函数的作用域链
3、函数的局部环境不仅有权访问函数作用域中的变量,而且有权访问其包含父环境,乃至全局环境;
4、全局环境只能访问在全局环境中定义的变量和函数,而不能直接访问局部环境中的任何数据
三、JavaScript是一门具有自动垃圾收集机制的编程语言,开发人员不必担心内存分配和回收问题。
1、离开作用域的值将被自动标记为可回收,因此将在垃圾收集期间被删除
2、“标记清除”是目前主流的垃圾回收算法,给当前不使用的值加上标记,然后再回收其内存
3、“引用计数”跟踪记录所有值被引用的次数。Javascript引擎目前都不再使用这种算法;但在IE中访问非原生JavaScipt对象时,这种算法仍然会导致问题
4、当代码中存在循环引用对象时,“引用计数”算法就会导致问题。
5、解除变量的引用不仅有助于消除循环引用现象,而且对垃圾收集也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环引用变量的引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值