分享变量解构分2部分
大家都了解JavaScript 中变量作用域的基本单元一直是 function,就是函数作用域,
如果创建块级作用域的话就是要声明立即调用函数
// 全局作用域
var a = 2
// 块级作用域,
(function (){
var a = 3
console.log(a)
})()
console.log(a)
es新增2个声明变量 let ,const方式, 只要在任意块里用这2个声明方式声明的都市块级作用域变量,
var,function声明的还是函数作用域变量,块的标志是{...}
这意味着我们只需要一对{ .. }
就可以创建一个作用域
var a = 2;
{
let a = 3
console.log( a ); // 3
}
console.log( a ); // 2
用于创建常量。块级变量声明,这个变量的值在声明时设定之后就不允许改变。 const 声明必须要有显式的初始化。如果需要一个值为 undefined 的常量,就要声明 const a = undefined 。
{
const a = 2;
console.log( a ); // 2
a = 3; // TypeError!
}
从 ES6 开始,块内声明的函数,其作用域在这个块内
{
foo(); // 可以这么做!
function foo() {
// ..
}
}
foo(); // ReferenceError
a = 1, 每隔1秒输出a+1的值, 并赋值给a以此累加到值5为止
// 错误的
// 错误原因是 异步执行时去找 i变量,此时i的值为
for (var i = 1; i<=5;i++) {
setTimeout(function(){
console.log('i=>', i)
}, i*1000)
}
// 利用之前的块级作用域
for (var i = 1; i<=5;i++) {
(function (i){
// 原因相当于每次声明一个i 来实现块级
setTimeout(function(){
console.log('i=>', i)
}, i*1000)
})(i)
}
// 利用ES6的块级申明
for (let i = 1;i<=5;i++) {
// 相当于每次声明 i 在块内
setTimeout(function(){
console.log('i=>', i)
}, i*1000)
}
let,var 声明且未赋值时默认值undefined,const必须显示声明 不会默认undefined
let name = '张三',age
var _name = '李四',_age
const __name = '王五', __age // 报错
原文:https://www.cnblogs.com/webchenhan/p/10635516.html