/*控制语句*/
//不同条件不同代码,或者重复执行一串代码

//先看语句块,是代码的集合,用{}圈起来。形成独立的运行环境。叫做作用域(后面再说)

{
//  由课堂例子引发的小问题
//  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声明,是局部变量,在作用域内使用
*/


扫一扫 手机查看

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注