JS作用域
作用域:变量可以起作用的范围 全局变量和局部变量 全局变量 在任何地方都可以访问到的变量就是全局变量,对应全局作用域 局部变量 只在固定的代码片段内可访问到的变量,最常见的例如函数内部。对应局部作用域(函数作用域) 不使用var声明的变量是全局变量,不推荐使用。变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁 块级作用域 任何一对花括号({和})中的语句集都属于一个块,在这之中定义的所有变量在代码块外都是不可见的,我们称之为块级作用域。 在es5之前没有块级作用域的的概念,只有函数作用域 ,现阶段可以认为JavaScript没有块级作用域 词法作用域 变量的作用域是在定义时决定而不是执行时决定,也就是说词法作用域取决于源码,通过静态分析就能确定,因此词法作用域也叫做静态作用域。 在 js 中词法作用域规则: 函数允许访问函数外的数据. 整个代码结构中只有函数可以限定作用域. 作用域规则首先使用提升规则分析 如果当前作用规则中有名字了, 就不考虑外面的名字 var num = 123;function foo() { console.log( num );}foo();if ( false ) { var num = 123;}console.log( num ); // undefiend 作用域链 只有函数可以制造作用域结构, 那么只要是代码,就至少有一个作用域,