javascript作用域和作用域链
作用域:函数的使用范围。
变量的讲解:
全局变量:声明的变量是用var声明的,那么这个变量就是全局变量,全局变量可以在页面的任意位置使用;如果页面不关闭,那么就不会释放,就会占空间,消耗内存;全局变量是不能被删除的
局部变量:在函数内部定义的变量是局部变量,外面的不能使用
全局作用域:全局变量的使用范围
局部作用域:局部变量的使用范围
块级作用域:在一对大括号内,可以看成一块,在这块区域中定义的变量,只能在这个区域中使用,但是在js中并没有块级作用域,即在这个块级作用域中定义的变量,在括号外面可以访问。
扩展:
隐式全局变量:声明的变量没有var,隐式全局变量是可以被删除的。
定义变量使用var是不会被删除的,没有var是可以删除的。所以以后要写var。
块级作用域代码
1、
1 2 3 4
| { var num=10; console.log(num); }console.log(num);
|
2、
1 2 3
| if(true){ var num=10; }console.log(num);
|
3、
1 2 3 4
| for(i=0;i<=5;i++){ nu=20; } console.log(nu);
|
4、隐式全局变量
1 2 3 4 5
| function f1(){ number =1000; } f1(); console.log(number);
|
隐式全局变量:声明的变量没有var,隐式全局变量是可以被删除的。
定义变量使用var是不会被删除的,没有var是可以删除的。所以以后要写var。
1 2 3 4 5 6 7
| var num1=10; num2=20; delete num1; delete num2; console.log(typeof num1); console.log(num1); console.log(typeof num2);
|
作用域链
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var num=10; function f1(){ var num=20; function f2(){ var num=30; function f3(){ var num=50; console.log(num); } f3(); } f2(); } f1();
|
下面是图解: