var let及const

  es6已经发布很久了,之前只会用var定义变量,学习了let和const后,又学到了一些作用域、JavaScript编译和深拷贝浅拷贝的知识。这章主要来说说这三个定义量的方法:

1.var

  在没学习es6时,会经常用到var,var用来定义一个变量,变量数据类型可以是基础数据类型,也可以是引用数据类型。它可以定义在全局,也可以定义在局部,但最后都会变成全局变量。并且后执行的赋值会覆盖之前的赋值,例:

var name = ‘小黑‘
console.log(name) //小黑
function changeName() {
    console.log(name) //undefined
    var name = ‘小白‘
    console.log(name) //小白
}changeName()
console.log(name) //小白

  例子还是老例子,功能也没变。为什么会打印出undefined呢?js在执行之前会有一个编译过程,他会先在当前作用域中寻找执行时需要的量,如果有,就不再去外部找了,如果没有,就会跳出当前作用域去父级作用域找。此时编译时找到name,会先给这个变量赋值为undefined,在执行时,先执行的打印语句,所以在没有执行name赋值之前,name就是undefined。

  在全局下用var定义一个变量name,给它赋值为‘小黑’,然后在局部改变name的值,全局的name也变了。这样就有一个弊端,在不同的作用域下,用同一个变量名,所有的变量都会发生改变,或者说,在不同作用域里,不可以使用相同的变量名,因为它会改变全局的变量,所以es6发布了新的定义变量的方法:

2.let

  let和var作用一致,都是用来定义变量的。区别在于在:

    1.同一作用域下同一个变量只能被let定义一次,而var可以重复定义多次;

let name = ‘小黑‘
let name = ‘小白‘
//报错

var name = ‘小黑‘
var name = ‘小白‘
//name = ‘小白‘

    2.用let定义变量会有暂时性死区,用let定义变量之前引用变量会直接报错,而用var定义变量之前引用变量会引用到undefined,称为变量提升;

console.log(name) //报错
let name = ‘小白‘

console.log(name) //undefined
var name = ‘小白‘

    3.在全局用let定义了变量,在局部里定义相同变量名后,全局的变量不会发生改变。

let name = ‘小黑‘
function changeName(){
    let name = ‘小白‘
    console.log(name) //小白
}
console.log(name) //小黑

var name = ‘小黑‘
function changeName(){
    var name = ‘小白‘
    console.log(name) //小白
}
console.log(name) //小白

3.const

  const的作用于let类似,它也有暂时性死区,相同的量名也可以定义在不同的作用域,并且在同一作用域下相同的量名只能被const定义一次。const与let的区别为:

    1.const定义的变量必须有初始值;

let name //undefined

const name //报错

    2.const定义的量是通过指针来保存数据的,这个量其实就是指针指向的地址,指针的指向不能变,所以const声明的量不能被改变;

let name = ‘小黑‘
name = ‘小白‘
// ‘小白‘

const name = ‘小黑‘
name = ‘小白‘
// 报错

这节就说到这吧,希望小白和小黑能给大家带来快乐~~

原文地址:https://www.cnblogs.com/btlbk/p/11395872.html

时间: 2024-10-10 20:48:05

var let及const的相关文章

es6 - 一共有 6 种声明变量的方法(var, function, let, const, class, import)

let声明的变量只在它所在的代码块有效. 不存在变量提升 let不允许在相同作用域内,重复声明同一个变量 暂时性死区,只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响, 定义之前不能使用. 应该避免在块级作用域内声明函数.如果确实需要,也应该写成函数表达式,而不是函数声明语句. for循环的计数器,就很合适使用let命令. for (let i = 0; i < 10; i++) {let i = 'abc';} // 变量i是let声明的,当

js中const,var,let区别

今天面试,被问了个问题,const, var, let的区别,当时就懵圈了,var 知道,const.let 是什么鬼??? 回来一百度,找到一篇通俗易懂的介绍,先取之收藏,以备忘.主要内容是:js中三种定义变量的方式const, var, let的区别. 摘自:http://www.cnblogs.com/ksl666/p/5944718.html 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 c

const,var,let笔记

js中定义变量的方式有三种const.var.let const 作用域:全局作用域或函数作用域 定义的变量不可修改,且必须初始化 eg: const a= 1; a= 2; console.log(a); //1 不可修改 const b; b= 1; console.log(b);// undefined 在定义的时候就必须初始化,否则赋值无效 var 作用域:全局作用域或函数作用域 变量可修改,定义时可不初始化 let 作用域:块作用域,即作用域在包裹其的{}或()中,对函数外边没有影响

关于var、let、const的故事

对于一门编程语言来说,变量与常量是再正常不过的两种,JavaScript是一直解释型的弱类型语言. JavaScript中变量或者常量可以用var.let.const(后两者是ES6的新特性). 1.let.const基本用法 只在声明所在的块级作用域内有效 { let a = 1; var b = 1; const c = 1; } a//Uncaught ReferenceError: a is not defined b//1 c//Uncaught ReferenceError: c i

var、let、const与JavaScript变量/常量的定义

早期的JavaScript中,声明变量只能使用var关键字定义变量,并没有定义常量的功能.通过var关键字定义的变量,其作用域只能函数级或是全局作用域,并没有块级作用域.ES6(ECMAScript 2015)对这一问题做了改善,增加了用于定义块级变量的let关键字和用于定义常量的const关键字. var定义变量 1.1 语法及说明 1.2 使用及特点 let定义块级变量 2.1 语法及说明 2.2 与var的异同 const定义常量 1. var定义变量 1.1 语法及说明 var关键字用于

var, let ,const区别

es6新增了let和const新命令,用于变量的声明,这两个和es5的var存在着差异,而且let和const也有着一些区别,既然他两是es6新增的方法那就有他们的独特之处,让我们来看看一看吧. 首先我们得先了解var的作用,var声明的变量可以改变,而且需要初始值否则会报undefined,这里存在着变量提升 ``js var a = 1; console.log(a)//a:1 function outPut(){ var a= 4; console.log(a)//a:4 } outPut

var与let、const的区别

var与let.const 一.var声明的变量会挂载在window上,而let和const声明的变量不会: var a = 100;console.log(a,window.a); // 100 100 let b = 10;console.log(b,window.b); // 10 undefined const c = 1;console.log(c,window.c); // 1 undefined 二.var声明变量存在变量提升,let和const不存在变量提升 console.lo

es64 const

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>const命令</title> <script src="../../../vendor/traceur.js"></script> <script src="../../../vendor/boo

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

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