作用域:就是代码名字(变量)能在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突
es5的作用域 ; 全局作用域 局部作用域
1、全局作用域 整个 script 标签 或者一个单独的js文件
var num = 10;
console.log(num); //10
// 局部作用域(函数作用域) 在函数内部的就是局部作用域
function fn() {
// 局部作用域
var num = 20;
console.log(num);
}
fn(); //20
2、变量的作用域 根据作用域的不同 我们变量分为全局变量和局部变量
2.1、全局变量 在全局作用域下的变量 在全局都可以使用
如果在函数内部 没有声明直接赋值的变量也是全局变量
var num = 10; // num就是一个全局变量
console.log(num);
function fn() {
console.log(num);
}
fn();
2.2、 局部变量 在局部作用域下的变量 后者在函数作用域下的就是 局部变量
function fun() {
var num1 = 10; //num1 就是局部变量 只能在函数内部使用
num2 = 20;
}
fun();
// console.log(num1);
console.log(num2);
3.从执行效率来看全局变量和局部变量
(1) 全局变量只有浏览器关闭的时候才会销毁 比较占内存资源
(2) 局部变量 当我们程序执行完毕就会销毁 比较节约内存资源
二、作用域链 :内部函数访问外部函数的变量 采取的是链式查找方式来决定取那个值 这种结构我们称之为作用域链 采取的是就近原则
var num = 10
function fn(){ // 外部函数
var num=20
function fun(){ // 内部函数
console.log(num);
}
fun()
}
fn()
案例1、
function f1(){
var num=123
function f2(){
console.log(num);
}
f2()
}
var num=456
f1()
案例2、
var a=1
function fn1(){
var a=2
var b='22'
fn2()
function fn2(){
var a=3
fn3()
function fn3(){
var a=4
console.log(a); // 4
console.log(b); //22
}
}
}
fn1()