1.作用域概述:就是代码名字在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突
2.js的作用域(es6)之前:全局作用域 局部作用域
3.全局作用域:整个script标签 或者是一个单独的js文件
4.局部作用域(函数作用域):在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
<script>
var num = 2;//这个num是全局的
function fn(){
var n = 1;//这个n是局部的
console.log(num);//在局部作用域下 可以访问全局作用域下的变量
}
fn();
console.log(n);//在全局作用域下是不能访问局部作用域中的变量
</script>
js在执行时 有预解析的过程 即将变量的定义 提升至其所在作用域的最前面
console.log(a);//undefined
var a = 10;
console.log(a);// 10
fn1();//函数可以先调用再声明
function fn1(){
console.log('hellow');
}
fun2();//用匿名函数定义就不可以先调用再声明
var fun2 = function(){
console.log('hellow');
}
作用域链: 内部函数访问外部函数的变量,采取的是链式查找的方式来决定取哪个值 这种结构我们称为作用域链
就近原则
var num = 10;
function fn() {//外部函数
var num = 20;
function fn() {//内部函数
console.log(num); //输出的结果为 20, 离他最近的变量是外部函数中的变量
}
fn();
}
fn();