语言基础
语言基础
JavaScript 历史
布兰登·艾奇(Brendan Eich,1961年~),1995年在网景公司,发明的JavaScript。
JavaScript诞生于1995年。它当时的目的是为了验证表单输入的验证。一开始JavaScript叫做LiveScript,但是由于当时Java这个语言特别火,所以搭上Java的顺风车,就改名为JavaScript。
同时期还有其他的网页语言,比如VBScript、JScript等等,但是后来都被JavaScript打败,所以现在的浏览器中,只运行一种脚本语言就是JavaScript。
经过许多年的发展,JavaScript从一个简单的输入验证成为一门强大的编程语言。
2003年之前,JavaScript被认为“牛皮鲜”,用来制作页面上的广告,弹窗、漂浮的广告。什么东西让人烦,什么东西就是JavaScript开发的。所以浏览器就推出了屏蔽广告功能。
2007年乔布斯发布了iPhone,这一年开始,用户就多了上网的途径,就是用移动设备上网。JavaScript在移动页面中,也是不可或缺的。并且这一年,互联网开始标准化,按照W3C规则三层分离,人们越来越重视JavaScript了。
今天,JavaScript工程师是能够和iOS、Android工程师比肩,毫不逊色的。
JavaScript是一种具有面向对象能力的、解释型的程序设计语言。更具体一点,它是基于对象和事件驱动并具有相对安全性的客户端脚本语言。
一、JavaScript 基础
JavaScript的组成
-
核心(ECMAScript)
ECMAScript是一个标准 。
因为网景的布兰登(Brendan Eich)开发了JavaScript,为了让JavaScript成为全球标准,几个公司联合ECMA(European Computer Manufacturers Association)组织定制了JavaScript语言的标准,被称为ECMAScript标准。
-
文档对象模型(DOM)
Document Object Model。文档对象模型,后边我们会有专门的课程来讲解DOM操作
-
浏览器对象模型(BOM)
Browser Object Model。浏览器对象模型,后边我们也会专门来讲bom操作
JavaScript 的引入及写法
- 内部书写
- 位于 head 部分的脚本:
当你把脚本放置到 head 部分后,必须等到全部的javascript代码都被下载、解析和执行完成后,才能开始呈现页面的内容(浏览器在遇到body标签才开始呈现内容)。
- 位于 body 部分的脚本:
为了避免上述问题,现代web应用程序一般把javascript引用放在body中,放在页面内容后面。这样,在解析包含的javascript代码之前,页面内容将完整呈现。
- 在html文件中直接进行代码的书写
-
外部引入
- 所有的script元素都放在页面的head元素中。
-
直接写在标签内
-
<p onclick="alert('你好');">点击我</p>
-
二、堆栈和垃圾回收
1.栈
var a = 1;
var b = a;
a = 2;
console.log(a,b)
2.堆
代码如下(示例):
var obj = {
a:1,
b:2
};
var obj1 = obj ;
obj.a = 66;
console.log(obj,obj1)
对象存在堆中 堆中的地址存在栈中,这个时候对象obj obj1在栈中开辟两个内存,存贮的是堆得地址,由于地址一样,所以改变对象中的值,另一个也会改变
堆和栈的要点
- 堆和栈的要点:
堆,队列优先,先进先出(FIFO—first in first out)。
栈,先进后出(FILO—First-In/Last-Out)。
一般情况下,如果有人把堆栈合起来说,那它的意思是栈,可不是堆。
堆和栈的对比分析:
1、堆栈空间分配
栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表
2、堆栈缓存方式
栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。
堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
3、堆栈数据结构区别
堆(数据结构):堆可以被看成是一棵树,如:堆排序。
栈(数据结构):一种先进后出的数据结构。
// 堆栈溢出: 当存储数据达到某一限制时就会造成堆栈溢出
// 内存泄漏: 当不断地向堆中存储数据,而不进行清理 这就是内存泄漏
// 垃圾回收机制: 清理堆中数据释放内存
// 语言中一般存在两种清理方式: 自动清理 手动清理 但是在 JavaScript 中只有自动清理,没有手动清理
// obj = null 清理机制 将对象置为 null 即将obj地址在栈中清除
// 垃圾回收机制: 就是将堆中引用地址的栈清除
三、常用方法
- console.log()
- alert() 警告消息框
- confirm() 确认消息框
- prompt() 提示消息框----就是专门用来给用户提供输入窗口的
// 写入内容
document.write('写入内容')
// 获取标签
document.body
// innerHTML inner 在什么里面
innerHTML是基于DOM writer是基于document
// 写入内容
document.write('写入内容') // 它会打开现有HTML中的body部分,重新写入内容,
// 如果是交互操作 原来有内容,会删除原来的内容,如果不是交互的不删除在原有的添加
<button onclick="document.write('重新写入')">点击写入</button>
document.writeln('5555','888')
/*
注意write()方法不会在每个语句后面新增一行:
Hello World!Have a nice day!
注意writeln()方法在每个语句后面新增一行:
Hello World!
Have a nice day!
*/
document.write('<button>anniu</button>') // 还可以写标签HTML