JavaScript学习——变量声明

变量

一.var关键字

1.var声明作用域

使用var操作符定义的变量会成为包含它函数的局部变量,该变量将会在函数退出时销毁

 function test() {
    var a = 'hi';//局部变量
  }
  test();
  console.log(a);//报错

这里的a变量是在test()函数内定义的,当调用test()函数时会给它赋值,当调用结束时将会销毁。
不过在函数内部定义变量时省略var,将会定义一个全局变量

 function test() {
 a = 'hi';//局部变量
 }
 test();
 console.log(a);//输出'hi' 
  去掉var之后,此时的a变成了全局变量,可以在函数外调用

2.var声明提升

  function test() {
      console.log(a);
      var a = 'hi';
  }
  test();//undefined
  使用var关键字声明的变量会自动提升到函数作用域的顶部,相当于如下代码
  function test() {
      var a;
      console.log(a);
      a = 'hi';
  }
  test();//undefined

二.let关键字

1.let声明作用域

let声明的范围是块作用域,而var声明的范围是函数作用域

  if (true){
      var a = 111;
      console.log(a);//111
  }
  console.log(a)//111
var定义的a可以被访问  
  if (true){
      let a = 111;
      console.log(a);//111
  }
  console.log(a)//ReferenceError: a is not defined a没有定义     
let定义的a则是报错a未定义

2.let的声明冗余

  var age = 1;
  var age = 2;
  console.log(age)//2

  let a;
  let a;//Uncaught SyntaxError: Identifier 'a' has already been declared 报错a已经被定义
  
  var a;
  let a;//报错
  
  let a;
  var a;//报错

let 不允许同一个块作用域中出现两个相同名称的变量,也就是不允许声明冗余
而var定义两个名称相同的变量时,后面的变量将会覆盖前面的变量

3.let不会在作用域中被提升

//name会被提升
console.log(name);//undefined
var name = 'Yuuujio';

//name不会被提升
console.log(name);
let name = 'Yuuujio';//报错 name未定义   

4.let的全局声明

let全局声明时与var不同,不会成为window对象的属性

var name = 'Yuuujio';
console.log(window.name);//Yuujio

let name = 'Yuuujio';
console.log(window.name);//undefined    

三.const声明

const会定义一个常量,const的行为基本与let相同,但是有两个重要的区别

1.const声明时必须同时赋值

    const a;//报错 未定义常量值

2.const声明的变量值不能修改

     const b = 1;
     b = 2;//报错 给常量赋值

3.其他特性

    //const也不允许重复声明
    const name = 'Yuujio';    
    const name = 'Yuki';//报错
    
    //const声明的作用域也是块
    const a = 1;
    if (true){
        const a = 2;
    }
    console.log(a);//1

4.例外

const声明的限制只适用于它指向的变量的引用。但是如果const变量引用的是一个对象,那么可以修改对象内部的属性

const person = {};
person.name = 'Yuujio';//ok
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值