1变量介绍
变量就是对 内存地址的引用
var k; //声明
k='kolento' //赋值
//以上代码也等于如下 缩写
var k = 'kolento'
//其他简写
var a=1,b=2,c=3
var a=b=c=1
变量声明赋值后会在内存中开辟一个空间存储内容,如果使用内存地址来访问赋值的 字符串非常麻烦,所以使用变量替代并且指向对应的内存地址获取内容。
注意:变量不能使用js关键字。
2.变量提升
JS代码在执行之前有一个分析的过程,这个过程会处理我们的代码,比如变量提升。
var a = 1
console.log(a)
var class = b
//结果 :在没有打印出a的情况下就报错了
//原因:变量提升,最后一行声明提升到console.log之前
//demo1
console.log(a)// 打印undefined
var a= 1
//以上代码会被解析为
var a;
console.log(a)
a=1
//demo2
if(false){
var a= 1
}
console.log(a) //打印 undefined,也是变量提升的原因
3.其他声明方式
ES6语法:let const
console.log(a) //undefined
var a = 1
console.log(b) //报错
let b =1
const c = 100 //定义常量,常量通常不可改变
const c=200 //报错
如果const的声明赋值和修改
不在同一个块作用域下则可以修改
const d = 1
{
const d = 2
console.log(d) //2
}
//使用const修改引用类型
const config={};
config.url='www'
console.log(config) //{url:'www'}
此处并没有修改内存地址只是修改了里面 的值,所以可以修改
let:定义变量,声明会产生一个临时的死区TDC,也就是 说必须在声明之后才能使用,没有变量提升,是块作用域 。
const:定义常量,同let一样必须先声明后才能使用。可以改变引用类型(对象 数组)的内容,但实际上内存地址没有改变。
4.作用域
a=1
console.log(1) //打印1 全局作用域
严格模式 'use strict' 下会报错
for(let i = 1;i<5;i++){ //块作用域(花括弧)
console.log(i)
}
块作用域可以防止对全局的变量进行污染