变量声明关键字var ,let,const

今天带大家了解的是比较有趣的几个变量声明关键字var,let,const。

我们在最初接触JS的时候,变量是我们重要的一个组成部分,在使用时规定必须要先进行声明,否则网页将会报错:

console.log(b); //b is not defined ,表示我们并没有对变量进行声明,却要调用变量b,这时网页报错b未被定义,这时我们又了解到了声明关键字var的存在,利用声明关键字对变量进行声明:

var a;
console.log(a);   //undefined,a未被赋值所以为undefined

这时我们就可以使用变量进行各种操作了。但var作为变量声明关键字却并不是那么的严谨与合理:

a = 20 ; //未对变量声明就先对变量进行赋值
  console.log(a);   //打印出变量的值为20
  var a;   //声明一个变量

从上面我们可以看出在我们打印之后才对变量进行了声明,为什么没有报错呢,这就是var声明变量的变量提升的的特点,会将var声明的变量提到程序的最前端优先执行,另一个不严谨的地方是:

var a = 10 ;  //声明变量a进行赋值
var a = 20 ;  //再次对变量a进行声明赋值
console.log(a);  //返回值20 

var 声明的变量可以进行多次重复的声明。

既然var作为变量声明关键字有那么多不严谨的地方,而我们js是向着更加严谨与合理的方向发展的当然要想出办法解决这种不严谨了,所以在ES6 中又新增另外两种变量声明关键字let 和const

在用法上与var大同小异,但在使用规范上确是更加严谨与合理了:1)不在存在变量提升;2)不允许重复声明同一变量在同一作用域;3)let具有块级作用域(花括号内),之前只有函数具有作用域;

4)存在暂时性死区,就是在变量未声明之前的区域不允许操作变量

 // let a = 10 ;  //声明变量a进行赋值
  // let a = 20 ;    //再次对变量a进行声明赋值,
  // 报错Identifier ‘a‘ has already been declared

  // a = 20 ;  //为先声明对变量进行赋值
  // let a;    //报错  Cannot access ‘a‘ before initialization初始化之前无法访问‘a‘

  // function fn(){
  //     a = "123";    //在a未被声明的这段区域被称为暂时性死区
  //     let a = "456";     //报错 a is not defined
  // }
  // fn();

const用法和使用与let相同,有唯一的区别是,const存储的是常量,保存的固定内容是地址而不是值,并且地址不允许被修改:

// 数据为固定的值时,地址和值是一体的
  // const a = 10 ;
  // 所以改变了值也就是将地址改变了
  // a = 20 ;
  // console.log(a);  //报错 Assignment to constant variable.语义:赋值给常量变量

  // 数据为对象时:
  const obj1 = {
      name:"haha1"
  }
  const obj2 = {
      name:"haha2"
  }
  obj1.name = obj2.name  //当改变值时
  console.log(obj1);    //{name:"haha2"}
  // obj1 = obj2;    //当改变了地址时
  // console.log(obj1);    //报错Assignment to constant variable.

原文地址:https://www.cnblogs.com/liguanlong/p/11439412.html

时间: 2024-10-11 20:34:49

变量声明关键字var ,let,const的相关文章

JavaScript中变量声明有var和没var的区别

本文来论述JavaScript中变量声明有var和没var的区别,关于Js中的变量声明的作用域是以函数为单位,所以我们经常见到避免全局变量污染的方法是 (function(){ ... })(): 在函数内部,有var和没var声明的变量是不一样的.有var声明的是局部变量,没var的,声明的全局变量. 在全局作用域内声明变量时,有var 和没var看起来都一样,我们知道,声明的全局变量,就是window的属性,究竟是否一样,我们通过ECMAScrpit5提供的属性的特性查询方法,来发现之间的区

javascript 变量声明有var与无var 的区别

1.在函数作用域内 加var定义的变量是局部变量,不加var定义的就成了全局变量.使用var定义var a = 'hello World';function bb(){var a = 'hello Bill';console.log(a); }bb() // 'hello Bill'console.log(a); // 'hello world' 不使用var定义var e = 'hello world';function cc(){e = 'hello Bill';console.log(e)

关于ECMAScript6 的学习01-ES6 的六种变量声明方式===关于常量const

const 变量声明常量   在声明const 时,必须初始化   否则会出错 const 变量与let 变量类似 作用域同样在{} 的范围内. 也不可以在同一作用域内声明两个同名 const 变量 const  实质上是使变量指向的内存地址不变,而不是使变量不能改变,对于像是一些字符型,数值型,布尔型的数据来讲,变量所指向的内存地址即是 变量的值. 但对于复合类型来讲 (主要是对象和数组)指向的内存地址保存的是指针,const只能保证指针不发生变化 ,但对于指针所指向的数据结构的变化它并不能控

关于变量声明的var,let,const

在js中,用var声明的话,在同一个作用域的范围内会存在声明提前的情况,举个例子: 按常理来说,我们此时需要的b应该输出的是 not defined 才对,但是实际上并没有,因为var b在判断之前已经声明了,在判断之后只是进行了赋值的操作而已. 用var声明在同一个作用域内是可以进行重复声明,浏览器并不会报错: 但是用let和const声明变量的话,在同一个作用域内是不允许重复声明,重复声明会告诉你该变量已经存在了, 必须是先定义再使用,不存在声明t提前这回事:         有着严格的作用

ES6的变量声明

在ES5中,变量声明只有var和function以及隐式声明三种,在ES6中则增加了let,const,import和class四种,以下来介绍着七种变量的声明. var ES5中最原始的变量声明,用于声明变量,其实JavaScript是弱类型语言,对数据类型变量要求不太严格,所以不必声明每一个变量的类型(这就是下面说的隐式声明,当然这并不是一个好习惯),在使用变量之前先进行声明是一种好的习惯. 1.作用域 使用var声明的变量的作用域是函数作用域(在ES5时代,只有函数作用域和全局作用域两种作

js声明引入和变量声明和变量类型、变量

问题: 在网页的发展历程中,发现网页不能对用户的数据进行自动校验,和提供一些特效. 解决: 使用javascript. 作用 可以让网页和用户进行直接简单的交互. 可以让网页制作特效和动画. 声明js代码域 1.<script type="text/javascript"></script> 2.<script src="js/my.js" type="text/javascript" charest="u

ES6和ES5变量声明的区别(var let const)

// es5的语法与es6的语法区别 // var let const console.log(name);//undefine,不会报错,因为变量声明会提到作用域的最前面 var name="aa"; for(var i=1;i<7;i++){ console.log(i); } console.log(i);//8,不会报错因为var声明的变量没有块级作用域 /** * 总结 var 声明的变量,声明语句会提到作用域的最前面,并且没有块级作用域 */ console.log(

2-新的变量声明方式(var ,let,const)

以前我们在声明时只有一种方法,就是使用var来进行声明,ES6对声明的进行了扩展,现在可以有三种声明方式了. 字面理解ES6的三种声明方式: var:它是variable的简写,可以理解成变量的意思. let:它在英文中是“让”的意思,也可以理解为一种声明的意思. const:它在英文中也是常量的意思,在ES6也是用来声明常量的,常量你可以简单理解为不变的量 --var声明---- var在ES6里是用来升级全局变量的,我们可以先作一个最简单的实例,用var声明一个变量a,然后用console.

ES6变量声明 ------ let and const

在ES5中,声明变量的方式只有一种, 那就是var, 如var mes ="hello", 但是用var声明变量有一个比较奇怪的地方,就是变量声明的提升,比如在函数中,无论我们声明变量的代码写在什么地方,它都是在函数顶部声明变量,在全局作用域下,则是在script标签顶部声明变量,这就有点郁闷了,因为按照我们正常的思维方式,我们代码是一行一行写的,只有用到某个变量的时候,才进行声明变量,并且声明变量后,只有它后面的代码才可以用,现在成了,我们在后面声明变量,在前面也可以用了,这不符合我