//做用域链 var title ="链条"; function f1(){ console.log("f1"+title); function f2(){ console.log("f2"+title); function f3(){ console.log("f3"+title); } f3();//f3链条 } f2();//f2链条 } f1();//f1链条
定义: 函数
变量在当前环境,内部环境,内部深层环境都其做用的现象造成了一个链条,这个链条就被称为变量的“做用域链”spa
特色:外部环境变量,能够给内部环境使用code
做用域链的做用对象
1.变量必须“先声明,后使用”blog
函数能够“先使用,后声明”,缘由是函数有预加载过程,本质仍是函数声明在前,使用在后作用域
//变量必须"先声明。后使用 " //同名的函数和变量的执行有顺序问题 var getInfo = "school"; getInfo(); //itcast function getInfo(){ console.log("itcast") //Uncaught TypeError: getInfo is not a function }
2.内部环境能够访问外部环境的变量,反之否则get
var age = 20; function f1(){ var height =170; console.log(age); //内环境,访问外环境 变量 } f1(); console.log(height);//外环境访问内环境变量(不容许)
3.变量的做用域是声明时决定的,而不是运行时it
var food = "milk"; function f1(){ console.log(food); //milk } function f2(){ var food = "brand"; f1(); } f2();
函数是在全局声明的,而调用时在f2内部环境调用的,由此能够发现,变量的做用域是声明的时候决定的,而不是在运行时io
活动对象 AO Active Objectconsole
1,js代码执行是有环境的
2,该环境定义了其有权访问的其余数据
3,环境有一个与之相关的活动对象AO
4,环境中全部的变量和函数都是活动对象的属性
5,全局环境是最外围的执行环境,活动对象是window对象
6,执行环境中的代码执行完毕后会被销毁
执行环境以及顺序优先级
var height =175; //外部环境变量 function f1() { var height = 165; //外部环境变量 function f2(height) { //形参 var height = 190; console.log(height); function height() { //本环境函数 alert('skdjlks') } } f2(180); } f1();
优先级 内部环境变量》》本环境函数》》》形参》》》 外部环境变量
全局变量和局部变量
全局变量:全局变量 其是活动对象 window的成员信息
局部变量:其在必定范围内能够看作是"全局变量",其在本环境,内部环境,内部深层环境均可以被访问