作用域:就是作用的范围,指它在函数在哪些范围内可以用,而在其他部分不可以,要用就得重新定义。
一.全局作用域
用 var 在全局(函数外)声明的所有变量,都具有全局作用域,即网页中所有脚本和函数均可使用
1.如果window对象的内在属性,则输出默认值,而非内置则undefined
console.log(window.name);//空,内在属性
console.log(window.abcd);//undefined,非内置
2.直接使用的全局变量,就是window的内置属性
console.log(window.name===name);//true
3.如果var声明了window对象的内置属性作为变量,则内置属性值被覆盖
var name='dayfly';
console.log(name); //输出的结果是dayfly
console.log(window.name);//也是dayfly
如果var声明了一个非内置属性的变量 var的全局变量即window的属性
var abcd='dayfly';
console.log(abcd); //输出的结果是dayfly
console.log(window.abcd);//也是dayfly
console.log(window.abcd===abc);//true 等价
所以就得出:浏览器环境有一个顶层对象window,其属性和var的全局变量等价
二.块级作用域(ES6新增的)
在函数中用 var 声明的所有变量,都是函数的局部变量,具有局部作用域,即变量只能在函数内部使用,函数外部是不行的
可以使用 let 关键字或者 const 关键字来实现块级作用域。
{{{...}}}块级作用域支持多层嵌套,每一层均为封闭,只作用于此
let或 const 声明的变量只在 let 或 const 命令所在的代码块 {} 内有效,在 {} 之外不能访问。
如果块级区域不使用 let,就会造成全局变量污染问题
怎么写一个块级函数:
在函数外加个{ },让其变成块级作用域