全局作用域
浏览器有一个顶层的对象window,其属性和var的全局变量等价
如果是window的内置属性,输出为默认值,否则为undefined
如果用var设置了window的内置属性作为变量,则该属性会被覆盖,造成window的污染
Node.js环境无法识别window,因为不是基于浏览器的
EC6之前,为了防止变量污染,采用自我立即执行匿名函数的方式防止变量污染
(function(){
var value = 10;
}());
console.log(value) // 报错value没有定义
块级作用域
EC6之前只有全局作用域和函数作用域,并没有所谓的块级作用域
{ }两个花括号里面的区域,就是块级作用域,比如循环体和条件体
{{{...}}}块级作用域支持嵌套,每一层都是封闭的,只作用于此层
函数定义
块级区域定义函数,在外部可以访问
块级区域,用let定义函数,在外部无法访问
{
function fn(){
console.log('块级函数fn')
}
let fnn = function(){
console.log('块级函数fnn')
}
fn() // 输出:块级函数fn
fnn() // 输出:块级函数fnn
}
fn() // 输出:块级函数fm
fnn() // 报错:函数fnn未定义
网友评论