撰写程序的时候,几乎都是用let去撰写,只知道他比var还要安全,不容易出错,更详细的原因,就没办法讲解得很透彻,本篇来复习他们之间的差异性。
es6以前传统宣告变数的方法,拥有以下特点:
var demo = '10';
var demo = '100';
console.log(demo);
let demo2 = '10';
let demo2 = '100';
console.log(demo2);
//Uncaught SyntaxError: Identifier 'demo' has already been declared
多人开发时如果重复变数,新的就会盖掉旧的变数,会造成很多问题,let则不允许同一个block重复宣告变数。
2.不支援区块作用域 (Block Scope)
var y = '100';
function fn(){
obj:{
var x = '10';
}
console.log(x);
};
fn();
范例中用var宣告,大括弧外一样可以取用,因为var不支援区块作用域,而是函式作用域。
es6 let的几个特性:
1.同一层 Block 无法重复宣告变数
obj: {
let x = 10;
let x = 20;
console.log(x);//Uncaught SyntaxError: Identifier 'x' has already been declared
}
2.支援区块作用域 (Block Scope)
var y = '100';
function fn(){
obj: {
let x = '10';
obj2: {
console.log(x);// "10"
}
}
console.log(x);// ReferenceError: x is not defined
};
fn();
最外层的console.log结果变成 ReferenceError: x is not defined,因为let的特性,此时的作用域只有在自己物件下有效,内层的onj2的console.log(x)结果则是"10"。
同一层 Block 无法重复宣告变数
支援区块作用域 (Block Scope)
宣告时需要初始化
const a = 10;
没有初始化会跳出错误:
const a = 10;
Uncaught SyntaxError: Missing initializer in const declaration
4.後续无法在更改值
:
const a = 10;
a = 100;//Uncaught TypeError: Assignment to constant variable.
全域作用域 Global Scope:
不在函式或区块宣告的变数,可以在任何地方取用,定义变数前没有加上宣告方式,在函式内也会成为全域变数,会污染整个环境,造成开发困难。
区域作用域 Local Scope:
function run(){
var x = 10;
console.log(x); //10
};
console.log(x) //x is not defined
run();
在函式内宣告的变数,只能在自己的函式内使用。
允许重复宣告
不支援区块作用域 (Block Scope)
同一层 Block 无法重复宣告变数
支援区块作用域 (Block Scope)
同一层 Block 无法重复宣告变数
支援区块作用域 (Block Scope)
宣告时需要初始化
後续无法在更改值
Kuro重新认识JavaScript
你不可不知的JavaScript 二三事
Python3 + selenium 撷取网站状态快照 系统更新与软件服务预装 $ sudo apt...
Unit Test 应用於 Async Code-1 - 前言 今天的文章内容是参考於 Testin...
如同近年被热烈讨论的 微服务架构* 与 CQRS架构*,AWS上推广的资料分析原则之一也是建议要将资...
--哇.这是什麽资料库,我怎麽没这个语法. drop table if exists delme c...
有时候,嗯!没错~有时候吧?某些事情不是只属於你一个人的,而是旁边有人默默的发光照耀着你,就像黑夜里...