一:先说下js的概念:
什么是js:
js和HTML和css有相似之处,都是可以在浏览器中解析的.我们通常JavaScript叫做JS。JavaScript是一门运行在浏览器端的脚本语言。
js一般运行在那些环境中:
浏览器
node
手机
嵌入式
ai
区块链
Java和JavaScript:
没有关系 如果非要从商业角度来说,JavaScript是借住Java火起来。
javascript的组成部分:
ECMAScript 欧洲计算机制造联合会 标准 规定常用的语法
BOM Brower Object Model
DOM Document Object Model
先学习ES
JS 的作用:
只要我们打开网站,就肯定有js的身影。
- 更好的组织我们页面的内容,让内容更加的有条理。
- 提供用户体验(表单验证[js的初衷],ajax交互数据)
- 游戏编程
- 实现页面的动态化,增加页面可观赏性
二:重点总结js变量
变量:
什么是变量:
程序运行中,可以改变的数据。(变量 = 变量名 +变量值)
什么是常量:
程序运行中,不可能改变的数据。
变量存储在什么中:
数据存在内存中,就像内存中有很多小格子(内存空间),这些小格子存储数据,如果需要使用数据,每个小格子(空间)有一个空间地址,根据这个地址,找到小格子,这时候把每一个小格子起一个别名 ,这个别名就是变量名。(就像每个人有身份证号,但是名字是最好记住的吧)
声明变量和定义变量的区别:
- 声明变量就是:var a;
- 定义变量:就是给变量名负值。 var a=10;
全局变量 和 局部变量(普通话和方言):
- 分界点:函数,全局变量在函数体外,局部变量定义在函数体内部。
- 在ES6之前,js中声明变量使用var ,声明函数用function
- 全局变量在函数内外都可以访问
- 局部变量只能在函数内可以访问,函数外不能访问
js常用数据类型:
针对不同的数据,分配不同的内存空间----是为了合理使用内存空间,节约内存资源。
其中分为两类:
基本数据类型:存储在栈区
nubmer,string,boolean,undefiend,null
引用数据类型:存储在堆区
object(array,function)
JS代码的解析与执行:
名词解析:
解析:就是预编译
提升变量声明 提升函数声明
执行: 按行执行代码,就是js是单线程,从上到下挨个执行任务
详情:https://blog.csdn.net/weixin_44667072/article/details/90516018
1,代码块可以有多个,上面的代码块不能使用下面的代码块中的数据,下面代码块可以使用上面代码块中的数据。
2,预编译
编译过程:如果代码要执行,先把它转成一个机器能够直接运行的程序(qq.exe,以exe.dll后缀名)。c,C#,Java,.net这些语言需要先编译,再执行。
js不需要这个编译过程。真正的执行过程,分成两步:
-
1.预编译阶段(预处理)
做两件事- 扫描整个代码段,如果有语法错误,则不会进入运行阶段,而是直接报错。
- 没有语法错误,接着做一件事:提升------又分为变量提升(var声明的变量)和函数提升。
提升:把这个变量或者是函数提到代码块的第一句。- 变量提升
提升变量: 1.将var声明的变量,提升代码块的最前面,没有用var声明的不用提升。
2.循环变量也可以提升。(for var i=1;i<5;i++),i会提升
3.函数内部加var的变量也会提升,提升到了函数内部的最前面 - 函数提升:
function f(){} //函数声明式 【提升】
var f = function(){}//函数表达式 方式 【不提升】,原因函数表达式本质是一个 变量
- 变量提升
-
2.执行:按代码顺序去执行。
三:var let const的解析:
var:
重复声明:
遗漏声明:没有加var关键字
没有块级作用域,提升。
块级作用域就是{ }。
在新版ES6中,使用 let const 定义变量
let:
与var类似,用来定义变量,避免了var的以上缺陷, 所以现在尽量用let 声明变量。
特点:
- 块级作用域(第三种作用域)。let所声明的变量,只在let命令所在的代码块内有效。
{
// let就会把这个a的作用域限定到{} ---->块级作用域
// 块级作用域 表示出来这个块,就不能访问
let a = 110;
console.log(a)
}
// console.log(a) //a is not defined
- 在使用var的时代,只有全局作用域和局部作用域,在es6中提出let关键,可以声明一个块级作用域。
- let没有“变量提升”现象。
console.log(a)
let a=1; //此时会报错,说明没有变量提升
- 不会成为window对象的属性
// 全局变量都会挂到window上面
var a = 110;
console.log(a)
console.log(window.a)
// 全局变量都会挂到window上面
let a = 110;
console.log(a)
console.log(window.a)
- 暂时性死区(TDZ)
- 不能重复定义
let a =2;
let a=3;
console.log(a); //会报错
const:
const:声明常量。数值不能改变。
特点:
- 1,定义完后,不能修改值(基本数据类型,也可能是地址)
- 2,不能重复声明
- 3,没有提升
- 4,声明时必须赋值