js函数作用域
JavaScript的函数作用域是指在函数内声明的所有变量在函数体内始终是可见的,可以在整个函数的范围内使用及复用,也就是说在函数体内变量声明之前就已经可用了(事实上在嵌套的作用域中也可以使用)。
全局变量:
声明在函数外部的变量,在代码中任何地方都能访问到的对象拥有全局作用域(所有没有var直接赋值的变量都属于全局变量)
最外层函数和在最外层函数外面定义的变量拥有全局作用域
所有末定义直接赋值的变量自动声明为拥有全局作用域
所有window对象的属性拥有全局作用域
局部变量
声明在函数内部的变量,和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域(所有没有var直接赋值的变量都属于全局变量)
ES6 块级作用域
为什么需要块级作用域
ES5只有全局作用域和函数作用域,没有块级作用域,会带来以下问题:
-
变量提升导致内层变量可能会覆盖外层变量
var i = 5; function func() { console.log(i); if (true) { var i = 6; } } func(); // undefined 2) 用来计数的循环变量泄露为全局变量 for (var i = 0; i <