JaveScript变量作用域说明
一:将var类型的变量视为变量,不带var类型的变量视为常量(但是注意php的常量不可以重新定义,而javascript中不带var类型的变量可以重新定义)
1:关于变量:
①全局变量:整个页面包括函数内部都可以使用(和PHP不同,PHP全局变量在函数内部中获取不到,只是在函数外部的整个页面中有效) ②局部变量:只在函数内部使用,外部接受不到。如果函数内外有一样名称的变量,视为两个不相干的变量。(这个和PHP一样)
2:关于常量:
①常量作用范围整个页面,包括函数内部(和PHP一样)
②若在函数内部定义了常量,如果不调用此函数那么外部得不到此常量的值,如果调用了此函数,函数外部也可以获得该常量的值(和PHP一样)
例子:
scope = "global"; function checkscope2(){ scope= "local"; myscope = 'local'; }checkscope2();console.log(scope);//"local"console.log(myscope);//"local"
| scope = "global"; function checkscope2(){ var scope= "local"; myscope = 'local'; }checkscope2();console.log(scope);//“global"console.log(myscope);//"local"
|
3:JavaScript中一个特殊的地方: 变量的预定义特效
JavaScript没有块级作用域,函数中声明的变量在整个函数中都是有定义的,具体例子如下:
[javascript]
- var scope = "global";
- function checkScope() {
- document.write(scope); //语句4.1
- var scope = "local"; //语句4.2
- document.write(scope);
- }
- checkScope(); //输出"undefined local"
- 由于语句4.2(var scope = "local";)声明的变量在整个checkScope函数作用域内都有效,因此在语句4.1(document.write(scope); )执行的时scope引用的是局部变量,而此时局部变量scope尚未定义,所以输出”undefined”。因此一个好的编程习惯是将所有的变量声明集中起来放在函数的开头。
- 分解后相当于:
- function checkScope() {
- var scope;
- document.write(scope); //语句4.1 undefined
- var scope = "local"; //语句4.2
- document.write(scope); //"local"
- }
- 补充一点:声明了变量但未赋值,则其类型和其值都是undefined ; 但如果为声明变量就调用则会报错