/*控制语句*/
//不同条件不同代码,或者重复执行一串代码
//先看语句块,是代码的集合,用{}圈起来。形成独立的运行环境。叫做作用域(后面再说)
{
// 由课堂例子引发的小问题
// var name = '峰华';
// var name ;//重新声明不赋值,不会替换hello值为undefined
// console.log(name)//峰华
// var hello = '张恒';
// var hello;//重新声明不赋值,不会替换hello值为undefined
// console.log(hello);//张恒,
}
{
//vh:之前说name有问题,是html保留字,
//这里还有影响,删除name相关赋值语句,即使刷新页面,name还是'峰华'
//var name = '峰华';
let name = '峰华';
console.log(name)//峰华
//但是假如,上面赋值语句var name = '峰华'删掉,保存,再运行只有下面这句:
console.log(name)//峰华,
/*
1.如果是hello的话,肯定就是undefined,但是name居然保留着
2.除非关闭网页。重新打开网页。
3.所以,尽量别用这些关键字。
4.看下面的普通变量名字的例子,是没有这样的现象的
5.如果是let声明的话,就正常了,就没有上面的刷新还能保留变量值的情况。删除let name = '峰华',这里就会显示空占一行。这也是name的特色,没有语法错误,但是会空占一行
6.普通变量hello如果是没有声明,就使用,会提示语法错误,hello is not defined
*/
//var hello;
let hello;
console.log(hello);//undefined,下面有赋值语句,但是刷新后,到这行还是undefined
hello = 1
}
console.log(name);//峰华,var在{}定义的上层可以访问;let在{}定义上层不可访问,这里是name所以是没有显示,但占用一行
console.log(hello);//1,var在{}定义的上层可以访问;let在{}里面定义,这里hello is not defined.语法报错了。
/*
var 声明是全局变量,不受作用域的影响
不用var,直接声明,是全局变量。
let和const声明,是局部变量,在作用域内使用
*/