欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaScript变量的定义关键字

程序员文章站 2022-04-04 21:15:49
...

变量

一.var关键字
var message;//定义了message变量,可用来保存任何值
1.var声明作用域
使用var操作符定义的变量会成为它的函数的局部变量。例如:

function test(){
    var message="hi";//局部变量
}
test();
console.log(message);//出错

解析:message变量是函数内部使用var定义的。调用函数,会创建这个变量并给他赋值。调用之后变量就会被销毁。但是在函数内定义变量时省略var操作符,可以创建一个全局变量。

function test(){
    message="hi";//全局变量
}
test();
console.log(message);//控制台输出"hi"

注意:虽然可通过省略var操作符定义全局变量,但不推荐这样。在严格模式下,如果像这样给未声明的变量赋值,会抛出ReferenceError。

定义多个变量:

var message="hi",
    found=false,
    age=29;
    /*
        在严格模式下这样会导致语法错误。
    */

2.var声明提升

function foo(){
    console.log(age);
    var age = 26'
}
foo();//输出undefined
/*
使用关键字声明的变量会自动提升到函数作用域顶部
*/

使用var反复声明同一个变量是不会报错的

var a=1;
var a=3;
var a=4;

二.let关键字
let和var作用差不多,但有着很重要的区别是,let声明的范围是块作用域,var声明的是函数作用域。

if(true){
    var name='matt';
    conlose.log(name);//输出matt
}
console.log(name);//matt;
if(true){
    let age=26;
    comsole.log(age);//26
}
console.log(age);//ReferebceError:age没有定义

let不能再同一个块作用域出现重复声明。会导致报错

let age;
let age;//SyntaxError;标识符age已经声明过了

1.let与var的另一个区别,let声明的变量不会再作用域提升

//name会被提升
console.log(name);//undefined
var name='matt';
//age不会被提升
console.log(age);//ReferenceError:age没有定义
let age=26;

2.全局说明,使用let在全局作用域中声明的变量不会成为window对象的属性(var变量则会)

var name='matt';
console.log((window.name);//'matt'
let age=20;
console.log(window.age);//undefined

3.在*域中不能声明两次

<script> 
  var name='zz';
  let age='12';
  console.log(name);//zz
  console.log(age);//12
</script>
<script>
  var name='ee';
  let age=12;
  console.log(name);//ee
  console.log(age);//报错
  /*
    因为let的作用域是块,
    所以不可能检查前面是否已经使用let声明过同名变量,
    同时也就不可能在没有声明的情况下声明它

三const声明
const与let差不多相同,唯一的区别就是声明变量时必须同时初始化变量,且尝试修改const声明的变量会报错。

const age=36;
age=16;//报错TypeError:给常量赋值
const name='mt';
const name='mz';//SyntaxError,不允许重复定义

注意在一下实例中不报错:

const name='z';
console.log(name);//z
{
    const name='x';
    console.log(name);//x;
}
//let定义也是一样的
let a=2;
console.log(a);//2
{
    let a=3;
    console.log(a);//3
}

const作用域也是块。
不允许重复定义。
注意const声明限制只适用于它指向的变量的引用。假如引用的是一个对象,修改对象内部的属性并不会违反const的限制。