一、变量提升
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
eg:
console.log(name,'name');
var name = 'zhangsan' // zhangsan,'name'
二、全局变量和局部变量
全局变量:其他任何位置使用var声明的的变量,函数除外,那么这个变量就是全局变量,全局变量可以在页面的任何位置使用。全局变量,如果页面不关闭,那么变量所占用的内存就不会释放,就会占空间,消耗内存。
局部变量:在函数内部定义的变量,是局部变量,外面不能使用 。
三、全局作用域和块级作用域
全局作用域:在JavaScript中{ }外面的作用域,就称之为全局作用域。既然是全局作用域,那么其中的声明的变量在全局中都可以使用。
块级作用域:一对大括号就可以看成是一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中在这个块级作用域中定义的变量,外面也能使用。(在ES6之前,只要{ }没有和函数结合在一起,那么{ }内的作用域就称为块级作用域。)
注意事项:
1、在块级作用域中,通过var定义的变量是全局变量;
2、在局部作用域中,通过var定义的变量是局部变量;
3、无论是在块级作用域还是局部作用域,只要省略了变量前面的let或者var,变量就会变成全局作用域里面的变量。
四、const、let、var的区别
const:是块级作用域,没有变量提升,不能声明同名变量,而且必须初始化,它声明的是常量,不可修改。
eg1:
const age = 18;
console.log('可以输出',age);
eg2:
const age = 18;
age = 12;
console.log('修改了const定义,无法输出',age)
解决方法:
const obj = {
name:'小红';
age = 18
}
obj.name = '小蓝'
console.log(obj)//可输出,小红变成了小蓝
let:没有变量提升,是块级作用域,不能声明同名变量,它声明的是变量,可修改,函数内部使用let定义后,对函数外部无影响。
var:var定义的变量可以修改,如果不初始化会输出undefined,不会报错。
五、模板字符串
模板字符串:``解析变量,保留原格式。
var a = '小绿'
var b = '${a}哈哈哈' //小绿哈哈哈