引入方式
标签内嵌、直接使用、外部引用
- HTML标签中内嵌JavaScript
<button onclick="JavaScript('点击出现的文字')">点击这里!</button>
- HTML页面中直接使用JavaScript
<script>
//要写的代码
</script>
- 外部引入JavaScript
<script src="此处为文件地址"></script>
let var const
let关键字 他声明的变量作用域只在循环体内,循环体外的变量不受影响
var关键字 他声明的变量是全局的,包括循环体内与体外
一、var let 区别
1.let和const不存在变量提升机制,而var存在;
- var 定义变量,可以在未定义前访问
- let定义变量,必须先定义,后访问
创建变量的六种方式中:var/function有变量提升,而let/const/class/import不存在
2.var允许重复声明,而let不允许重复声明
-
如果使用var/function关键词声明变量并且重复声明,没有影响(之后再遇到的不会重复声明)
-
let/const浏览器会校验当前作用域中是否已存在这个变量,再次声明会报错
3.作用域不同:var为全局变量,let定义块级作用域
- var定义的变量作用域仅限于该变量的代码块中
- Let定义的变量作用域为定义该函数范围中或者为全局的范围
ES5只有全局作用域和函数作用域,没有块级作用域,会有很多不合理场景
ES6中let实际上为JS新增了块级作用域
二、let const
const关键字定义常量,该关键字可定义一个或多个常量,定义时必须进行初始化,且初始化后值不可再改变。
改变方法:
但是定义的引用类型中的数组与对象可以通过修改对象属性改变;如果是声明了数组,数组里面的值也是可以修改的,可以修改常量数组,不可以进行重新赋值。数组被定义为常量也是不受保护的,一般不建议声明数组。
- 声明对象:
- 声明数组
语法“const 变量名=值;”或“const 变量名1=值1,变量名2=值3,…,变量名n=值n;”。
相似点:
- 两者都是块级作用域
- 都不能和它所在作用域内的其他变量或函数拥有相同的名称
改变方法:
-
const声明的常量必须初始化,而let声明的变量不用
-
const定义常量的值不能通过再赋值修改,也不能再次声明。而let定义的变量值可以修改。
变量提升
- 变量声明提升:var声明语句,在声明和赋值之前可以被访问到,返回值是underfined
- 函数声明提升:function声明的函数,可以在声明之前调用该函数(不推荐)
- 函数表达式声明的变量提升:等同于变量提升,声明语句之后可以调用该函数
链接: JavaScript 声明提升 | 菜鸟教程 (runoob.com)
变量提升:
当浏览器开辟出供代码执行的占内存后,代码并没有自上而下立即执行,而是继续做了一些事情:把当前作用域中所有带var/function关键字的进行提前的声明和定义。
console.log(a);//underfined
var a=qq;
//输出underfined
//相当于下面的代码
var a;