块级作用域、函数作用域以及全局作用域,彻底搞明白了!-QUI-Notes

块级内声明

  • let 声明块级遍历,作用域仅在{}块级内部,外部报错未定义
  • var 声明全局变量,作用域为全局

案例:

{
let a = 1; // let 声明块级遍历,作用域仅在{}块级内部,外部报错未定义
var b = 2; // var 声明全局变量,作用域为全局
}
console.log(b) // 2
console.log(a) // Uncaught ReferenceError: a is not defined

函数内部声明

  • 函数作用域函数内部的变量,作用域在函数内
  • var 函数内部声明,作用域依旧在函数内部,外部无法访问!
  • 未用var,let,const声明时,变量默认为全局变量

案例:

function aa(){
  let b = 4;  // 函数内部变量,作用域在函数内
  var a = 6;  // var 函数内部声明,作用域依旧在函数内部,外部无法访问!
  c = 8; // 未用var,let,const声明时,变量默认为全局变量
  console.log("函数作用域:"+b) // 4
}
aa()
console.log(b) // 2
console.log(c) // 8
console.log(a) // Uncaught ReferenceError: a is not defined

总结

  • var在函数内声明变量,是局部变量!var在块级内声明时全局变量
  • let在块级和函数内声明变量,都是局部变量!
  • var,let在函数和变量外部声明,均属于全局变量!
  • 未使用声明字符,在函数和块级内,均属于全局变量!