持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第15天,点击查看活动详情
作用域
//就是代码名字在某个范围内起作用和效果
目的是为了提高程序的可靠性更重要的是减少命名冲突
es6之前
全局作用域 (整个script标签或者是一个单独的js文件)
var num = 0;
局部作用域(函数作用域)代码只在函数内部起效果和作用
function fn() {
//局部作用域
}
变量的作用域:根据作用域的不同我们把变量分为全局变量和局部变量
全局变量: 在全局作用域下的变量
//注意 在函数内部,没有声明直接赋值的变量也属于全局变量
var num = 10; //num就是一个全局变量
局部变量 在局部作用域下的变量 后者在函数内部的变量就是局部变量
//注意函数的形参也可以看做是局部变量
function fun(aru) {
var num1 = 10; //num1只能是局部变量,只能在函数内部使用
num2 = 20;
}
从执行效率来看全局变量和局部变量
全局变量只有在浏览器关闭是才会被销毁,比较占内存
局部变量:只有代码块被执行时,会被初始化,代码块运行结束,会被销毁,会更节省空间
js块级作用域
es6之后新增 for{} if{}
作用域链(就近原则)
内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值,这种结构我们称为作用域链
预解析
js引擎运行js分为两步: 预解析 代码执行
js引擎会把js里面的所有var 还有 提升到当前作用域的最前面
代码执行 按照代码书写的顺序从上往下执行
预解析分为变量预解析(变量提升) 和函数预解析 (函数提升)
变量提升 就是把所有的变量声明提升到当前作用域的最前面,不提升赋值操作
函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数