JavaScript 学习-9.使用let声明变量
Posted 上海-悠悠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 学习-9.使用let声明变量相关的知识,希望对你有一定的参考价值。
前言
ES2015(ES6) 新增加了两个重要的 javascript 关键字: let 和 const。
- let 声明的变量只在 let 命令所在的代码块内有效。
- const 声明一个只读的常量,一旦声明,常量的值就不能改变。
在 ES6 之前,JavaScript 使用var声明变量只有两种作用域: 全局变量 与 函数内的局部变量。
var声明变量使用
var声明变量只有两种作用域: 全局变量 与 函数内的局部变量。
全局变量
在函数外声明的变量作用域是全局的, 在任意地方都可以引用
var x = 'hello';
function fun1()
// 函数内部也可以引用x
console.log(x)
fun1();
局部变量
在函数内部定义的var 变量只能局部使用,函数外面都无法引用。
function fun1()
var x = 'hello';
// 函数内部可以引用x
console.log(x)
// 函数外面不能引用函数内部变量x
console.log(x) // x is not defined
fun1();
没有块级作用域
使用var定义的变量,没有块级作用域,什么是块级?比如if 后面大括号的内容,for 循环大括号里面的循环体,都是块级。
a = 10;
if (a > 0)
var x = 'hello'
// if 块级外面也能引用x
console.log(x)
for 循环体也是块级
arr = [1, 2, 3];
for(var index in arr)
var x = 'world'
// for 外面也能引用x
console.log(x); // world
// for 外面也能引用index
console.log(index); // 2
没有块级作用域,那在使用过程中就会出现一些问题,比如重新声明同一个名称变量
var a = 'hello'
var x = 20;
if (x > 0)
var a = 'world';
// 在if 中声明了同一个a, 最后会影响外面的a值
console.log(a); // world
为了避免这种问题,所以在新的ES6 中添加了let 关键字声明变量
let 声明变量作用域
块级作用域
使用let声明的变量,首先具有块级作用域的概念,在块级代码声明的变量,外面无法引用
a = 10;
if (a>0)
let x = 'hello'; // let 声明块级变量
console.log(x);
console.log(x); // x is not defined
如果块级代码外面也有同一个名称变量,使用let互不影响
a = 10;
let x = 'world'
if (a>0)
let x = 'hello'; // let 声明块级变量
console.log(x); // hello
console.log(x); // world
在for循环时使用let定义循环变量i
let i = 5;
for (let i = 0; i < 10; i++)
// do something...
console.log(i) // 这里输出 i 为 5
局部变量
在函数体内使用 var 和 let 关键字声明的变量有点类似, 作用域都是局部的:
function fun()
let x = "hello"; // 局部作用域
return x
全局变量
在函数体外或代码块外使用 var 和 let 关键字声明的变量也类似,它们的作用域都是全局的
// 使用 var
var x = 'hello'; // 全局作用域
// 使用 let
let y = 'hello'; // 全局作用域
let 和 var 不一样的地方
重复声明
var 可以对同一个变量重复声明,但是let不能重复声明
// 使用 var
var x = 'hello';
var x = 'world';
console.log(x); // world
使用let重复声明同一个let声明过的变量会报错,相同的作用域或块级作用域中都不行。
// 使用let
let y = 'world';
let y = 'world'; // 报错
会抛出异常Uncaught SyntaxError: Identifier 'y' has already been declared (at ...)
也不能使用 let 重复声明 war 声明过的变量,相同的作用域或块级作用域中都不行。
var y = 'world';
let y = 'world'; // 报错
或者以下也不行
let y = 'world';
var y = 'world'; // 报错
变量提升
let 声明的变量没有提升
console.log(x) // undefined
var x = 'hello'
console.log(y) // 报错
let y = 'world';
全局作用域
使用 var 关键字声明的全局作用域变量属于 window 对象:
var x = "hello";
// 可以使用 window.x 访问变量
使用 let 关键字声明的全局作用域变量不属于 window 对象:
let y= "world";
// 不能使用 window.y访问变量
总的来说let声明的变量多了一个块级作用域的使用,在使用的时候尽量避免声明同一个变量。
以上是关于JavaScript 学习-9.使用let声明变量的主要内容,如果未能解决你的问题,请参考以下文章
javascript精雕细琢:var let const function声明的区别