JS中的作用域与作用域链
1、作用域:即变量和函数能够起作用的范围。
//1.变量,函数作用的范围???
//2.变量为什么前置访问undefined,而函数可以任何地方调用????
//一.作用域(全局作用域,局部作用域)
//1.全局作用域(全局变量):对整个script块内都是有效,也可以理解成作用于整个文档。
// var a=5;
// function fn(){
// return a;
// }
// alert(fn());//5
//2.局部作用域(局部变量):作用于函数内部,函数外部无法获取。
// function fn(){
// var num=100;//num只能给函数内部使用。
// return num;
// }
// fn();
// alert(num);//num is not defined
// if(true){
// var num=100;
// }
// alert(num);//100
//3.特殊情况,如果声明的变量前面没有var关键字,变量变成了全局的属性(全局变量,这种最好叫全局的属性,而不是全局变量)
// function fn(){
// a=1;//全局属性,变量是window下面的属性,window.a 。
// return a;
// }
// fn();
// console.log(a);//1
2、作用域链:就近原则,变量从内到外查找的方法过程
//4.作用域链:内---外方法过程。
// var a=1;//全局的
// function fn(){
// var a=2;//局部的
// function fn1(){
// var a=3;//局部的
// console.log(a);
// }
// fn1();
// }
// fn();//调用
//上面的a=3如果没有,fn1中console.log(a)就会寻找上一级作用域里面的a=2,若a=2也没,就会找全局作用域的a=1。这样按着作用域一级一级向上查找就是在作用域链上查找。