浅谈JavaScript之var,let以及const

2017-02-07  本文已影响247人  小m_up

var

语法及说明

var关键字用于声明一个或多个变量,声明多个变量时使用逗号(,)分隔,声明变量的同时可以对其初始化。

var name1 = value , name2 = value2 , ......

使用var声明变量时,声明的变量作用域是在当前位置的上下文中。
例如:

var a = 1;
function x(){
  a = 2;
  console.log(a);
}
x();

则输出为2,因为全局有效,所以可以修改其值。
但是如果只是将其声明并未赋值,则不会报错,其值为undefined。

var a;
function x(){
  console.log(a);//输出为undefined
}
x();
特点
function x(){
    a = 1;
    var a;
    console.log(a);//输出为1
}
x();

注意:虽然可以先使用再定义变量,但是建议还是先定义再使用,这样可以使变量的作用域更加清晰。

function x() {
  y = 1;   // 在严格模式下会抛出ReferenceError
  var z = 2;
}
x();
console.log(y); // '1'
console.log(z); // ReferenceError: z is not defined

声明变量在任何代码执行前创建,而未声明的变量只有在执行赋值操作的时候才会被创建:

console.log(a);  // 抛出ReferenceError。
console.log('hello world'); // 不会执行

声明变量是不可配置属性,而未声明变量是可配置的:

var a = 1;
b = 2;
delete this.a; // 在严格模式下抛出TypeError,非严格模式下执行失败且无任何提示
delete this.b;
console.log(a, b); // 抛出ReferenceError,'b'属性已经被删除

在严格模式下,使用未赋值的变量会抛出异常,推荐还是先定义(声明)再使用变量。

let

语法及说明

let用于定义块级变量,其语法结构类似于var:

let name1 = value , name2 = value2 , ......

特点
 var a = 1;
  if(a > 0){
     let b = 2;
     console.log(b);//输出2
     a --;
  }
  console.log(a);//输出0
  console.log(b);//“ReferenceError”

所以此时的b的作用域是if语句里面。

function () {
  let a = 1;
  let a = 2;
}//error
a = 1;
let a;
console.log(a);//error

const

语法及说明

const用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

const name1 = value1 , name2 = value2 , ......

特点
const PI = 3.14;
PI = 1;
console.log(PI);//error
const a; //error
 var a = 1;
  if(a > 0){
     const b = 2;
     console.log(b);//输出2
     a --;
  }
  console.log(a);//输出0
  console.log(b);//“ReferenceError”
console.log(a);//error
const a = 1;

何时使用var,let以及const

在ES6中基本已经不建议用var了,因为var定义的变量没有块级作用域,并且它存在变量声明提升,在严格模式下可能会出现意想不到的错误,我们现在推荐使用const,当不能使用const的时候再用let。

上一篇 下一篇

猜你喜欢

热点阅读