3、在{},for(){},if(){},switch(){}中声明变量,这里的块级作用域是有效的吗?(ES6的代码块级作用域,什么时候才生效)
var声明变量:无效,不存在块级作用域
let/const声明变量:有效,存在块级作用域
注意:for循环里面不能用const声明 i ,即for(const i = 0,i<arr.length,i++){},因为这里的 i 会进行自增i++,然后将自增的值赋给下一个作用域的i,而const只能声明常量,是不允许被修改的(这里的自增修改了i值,具体看如下:例子)
for...of遍历数组
var arr = ['cba','nba','abc']
//1、for循环不能用const来声明 i
for(let i,i<arr.length,i++){
console.log(arr[i])
}
{
let i = 0
i++//自增,然后赋值给下面的i ,所以for循环不能用const来声明 i
}
{
let i = 1
i++
}
{
let i = 2
}
//2、for...of
for(const item of arr){
console.log(item)
}
{const item = 'cba'}//这里每个作用域都有自己声明的item,互不影响,所以for...of可以用const声明 item
{const item = 'nba'}
{const item = 'abc'}
ES6的代码块级作用域(补充:ES6的代码块级作用域,对let/const/function/class声明的类型是有效)
// ES6的代码块级作用域
// 对let/const/function/class声明的类型是有效
{
let foo = "why"
function demo() {
console.log("demo function")
}
class Person {}
}
// console.log(foo) // foo is not defined(报错)
demo()//没有报错,可以调用。 解释: 不同的浏览器有不同实现的(大部分浏览器为了兼容以前的代码, 让function是没有块级作用域)
var p = new Person() // Person is not defined(报错)
if(true){
class People {}
}
var people = new People()// People is not defined(报错)
var声明变量:无效,不存在块级作用域
let/const声明变量:有效,存在块级作用域
注意:for循环里面不能用const声明 i ,即for(const i = 0,i<arr.length,i++){},因为这里的 i 会进行自增i++,然后将自增的值赋给下一个作用域的i,而const只能声明常量,是不允许被修改的(这里的自增修改了i值,具体看如下:例子)
for...of遍历数组
var arr = ['cba','nba','abc']
//1、for循环不能用const来声明 i
for(let i,i<arr.length,i++){
console.log(arr[i])
}
{
let i = 0
i++//自增,然后赋值给下面的i ,所以for循环不能用const来声明 i
}
{
let i = 1
i++
}
{
let i = 2
}
//2、for...of
for(const item of arr){
console.log(item)
}
{const item = 'cba'}//这里每个作用域都有自己声明的item,互不影响,所以for...of可以用const声明 item
{const item = 'nba'}
{const item = 'abc'}
ES6的代码块级作用域(补充:ES6的代码块级作用域,对let/const/function/class声明的类型是有效)
// ES6的代码块级作用域
// 对let/const/function/class声明的类型是有效
{
let foo = "why"
function demo() {
console.log("demo function")
}
class Person {}
}
// console.log(foo) // foo is not defined(报错)
demo()//没有报错,可以调用。 解释: 不同的浏览器有不同实现的(大部分浏览器为了兼容以前的代码, 让function是没有块级作用域)
var p = new Person() // Person is not defined(报错)
if(true){
class People {}
}
var people = new People()// People is not defined(报错)