作用域是可访问变量的集合。
1 function abc(){ 2 // 当在函数中定义变量时,这个变量的作用范围仅在函数中 3 var a=1; 4 a++; 5 console.log(a); 6 } 7 abc(); 8 abc(); */ 9 // 执行2遍以后,a的结果仍然是2 10 // 每次执行函数abc,都会重新将a定义为1 11 // 函数执行完成,定义在函数中变量a去哪里了?外面为什么调用不到 12 // 外面调用不到的主要原因是因为a的作用范围仅在函数中,当函数执行完成后a就会自动被销毁
1 function abc(){ 2 var a=1;//a是局部变量 3 } 4 abc(); 5 console.log(a); 6 7 8 9 var a=3; 10 function abc(){ 11 console.log(a);//undefined 12 // 在当前函数中使用var定义了局部变量,那么在当前函数中任何位置调用的都是 13 // 局部变量 14 // 全局变量是无法获取的 15 var a=5; 16 console.log(a,"_________"); 17 // 局部变量不会覆盖全局变量 18 // window.a就是全局变量a,后面的a是局部变量a 19 // 在ES6中window.a也不允许使用了 20 //console.log(window.a+a); 21 } 22 23 abc(); 24 // console.log(a);//当在函数外打印变量,这个变量肯定就是全局变量 25 // 定义的局部变量不会改变全局变量 26 // 我们认为一旦在函数中定义了局部变量,那么这个局部变量名字如果和全局变量名相同 27 // 全局变量将无法直接在函数中使用了,局部变量的优先级高
1 var a=3; 2 function abc(a){ 3 // a是一个参数,参数也是局部变量 4 console.log(a);//(1) 7 打印局部变量参数 5 var a=10;//重新定义局部变量,参数被覆盖 6 console.log(a);//(2) 10 打印重新定义的局部变量a 7 } 8 abc(7); 9 console.log("a");//(3) "a" 这里的a是双引号引起了,所以这是字符a 10 console.log(a);//(4) 3 这里的a是变量,因为在函数外打印的变量都是全局变量 11 // 一旦函数中的局部变量名和全局变量名相同,在函数中使用的变量都是局部变量
1 var a=1; 2 // 命名函数在代码中定义以后,script被执行时,会自动将函数放在堆中 3 // 并且将函数存储在栈中的全局变量,定义函数全局是最为优先,最早的 4 // 当代码执行到 var a=1时,才开始重新定义变量a,而这个变量a 5 // 与栈中的全局函数a重名,因此变量a就会覆盖全局函数a 6 function a(a){ 7 console.log(a);//(2) 8 var a=3; 9 console.log(a);//(3) 10 } 11 console.log(a);//(1) 1 12 a(10); //1 不是一个函数所有报错 13 console.log(a);//(4)
原文:https://www.cnblogs.com/wyp-King/p/12676711.html