前段3个层次
- 结构层 HTML 搭建结构 防止部件 描述定义
- 样式层 CSS 美化页面 实现布局
- 行为层 JavaScript 实现教护效果 数据收发 表单验证
ECMAScript是JavaScript的标准
1997 欧洲计算机制造商协会ECMA 设置了JavaScript的标准 命名为ECMAScript
JavaScript体系
语言核心(ES6)
DOM
BOM
JavaScript的书写位置
- 在body中script标签里 在内部书写JavaScript代码
- 将代码单独保存为.js格式文件 然后咋iHTML文件中引入它 注意src来确定路径
输出语句
alert()语句 弹出警告框
console.log()语句 控制台输出
alert是内置函数 函数就是功能的封装 调用函数需要使用圆括号
console是js内置对象 通过点 . 可以调用她内置的log方法
变量
变量是什么
变量是在内存中存储值的符号
变量不是数值本身 仅仅是一个用于存储数值的内容
定义变量
要是用变量 第一步就是声明 然后赋值 总称为初始化
let const var
变量的默认值
一个变量之定义 但没有赋初值 默认值是undefined!!!
一个变量只有被定义 并被赋初值才算初始化完成
变量的常见错
不用关键字定义 而是直接赋值 虽然不会引发错误 但会产生作用域问题
作用域会直接属于window 而不是块状作用域
变量的合法命名
只能由字母 数字 下划线 组成不能用数字开头
不能是关键或者保留字
对大小写敏感 a和A两个不同的变量
重点!!! var变量的声明提升
定义: 稍后才声明的变量可以被提前使用 而 不会产生异常
结果: 变量声明提升是 值提升变量的定义 不会提升它的值
原理: 预编译阶段 预先读取所有变量定义 仿佛变量定义被提升
等价于
事关作用域(简明)
windows : 最大的外部作用域
函数作用域函 :函数内部的范围
块状作用域 : if while 等后面的{} 或者单独一个{}
范围当前作用不存在的变量或者函数的时候 会逐层向上寻找 直到找到 所以速率最高的是在局部作用域里找变量和函数 而不是放在windows里
事关解析机制
解析机制
- 预解析
- 逐行解析
预解析
- 先给全局变量 赋值undefined var变量提升
- 再函数提升 给函数赋值undefined
- 函数内部var变量赋值undefined var变量提升
注意
- 预解析里遇到同名变量 后来的覆盖前面的
- 预解析李遇到同名的函数和变量 函数覆盖变量