js 关于全局变量和局部变量的简单理解
1.简单来说在 函数里边定义的变量是局部变量,在函数外边访问不到; 全局变量是在函数外边的,在函数内外都可以被访问;
var a = 10;
function test() {
var b = 100;
console.log(a);//打印结果是10
a=100; //a前面没有var 所以这是全局变量。执行函数之后被赋值。
}
test();
console.log(a); //打印结果为100
console.log(b);//报错 b is not defind
var a = 10;
function test() {
var b = 100;
console.log(a);//打印结果是undefined
var a=100; //a有var 所以这是局部变量。执行函数之后被赋值
}
test();
console.log(a); //打印结果为10
console.log(b);//报错 b is not definded
说明: 因为a 是全局变量所以在函数内部可以被访问且被赋值;第一次打印结果为10;
执行函数后a的值变为100 ;
b是局部变量;在函数外部被打印,访问不到b的值 所以报错;
2.如果局部变量和全局变量的变量名相同的情况;
1 var a = 10;
2
3 function test() {
4
5 console.log(a);//打印结果为undefind
6 var a = 100;
7 console.log(a);//打印结果为100
8
9 }
10
11 test();
12
13 console.log(a);//打印结果为10
说明:1.如果局部变量的变量名和全局变量名形同,在函数内部变量值全部指向局部变量;
2.第5行结果为undefind;因为只要局部变量a被声明,a就指向局部变量,但是打印在赋值之前,结果为undefind;
第二次打印结果在赋值之后 为100;
要想改变全局变量a 的值,可以用window.a ;
3.第三次打印在函数外边,所以打印全局变量a,值为10;
3.关于参数问题;参数也是局部变量;
1 var a = 1;
2
3 function test(a) {
4
5 a=100;
6 console.log(a);//打印结果为100
7 return a;
8 }
9
10 test(a);
11 // a=test(a);
12
13 console.log(a);//打印结果为1
说明:函数的形参和全局变量重名;既然参数也是局部变量,那函数内部对于a的操作都指向局部变量a影响不了全局变量a,
所以13行输出1;第5行输出100;
浅显的理解就是参数就是引用变量的值,在函数内部进行加工,其实不改变变量的值;(这里是值类型的参数传递情况可以这么理解);
如果是引用类型的参数传递;就会影响到全局变量的值了;(这个和数据存储有关);
长风破浪会有时,直挂云帆济沧海
1.简单来说在 函数里边定义的变量是局部变量,在函数外边访问不到; 全局变量是在函数外边的,在函数内外都可以被访问;
var a = 10;
function test() {
var b = 100;
console.log(a);//打印结果是10
a=100; //a前面没有var 所以这是全局变量。执行函数之后被赋值。
}
test();
console.log(a); //打印结果为100
console.log(b);//报错 b is not defind
var a = 10;
function test() {
var b = 100;
console.log(a);//打印结果是undefined
var a=100; //a有var 所以这是局部变量。执行函数之后被赋值
}
test();
console.log(a); //打印结果为10
console.log(b);//报错 b is not definded
说明: 因为a 是全局变量所以在函数内部可以被访问且被赋值;第一次打印结果为10;
执行函数后a的值变为100 ;
b是局部变量;在函数外部被打印,访问不到b的值 所以报错;
2.如果局部变量和全局变量的变量名相同的情况;
1 var a = 10;
2
3 function test() {
4
5 console.log(a);//打印结果为undefind
6 var a = 100;
7 console.log(a);//打印结果为100
8
9 }
10
11 test();
12
13 console.log(a);//打印结果为10
说明:1.如果局部变量的变量名和全局变量名形同,在函数内部变量值全部指向局部变量;
2.第5行结果为undefind;因为只要局部变量a被声明,a就指向局部变量,但是打印在赋值之前,结果为undefind;
第二次打印结果在赋值之后 为100;
要想改变全局变量a 的值,可以用window.a ;
3.第三次打印在函数外边,所以打印全局变量a,值为10;
3.关于参数问题;参数也是局部变量;
1 var a = 1;
2
3 function test(a) {
4
5 a=100;
6 console.log(a);//打印结果为100
7 return a;
8 }
9
10 test(a);
11 // a=test(a);
12
13 console.log(a);//打印结果为1
说明:函数的形参和全局变量重名;既然参数也是局部变量,那函数内部对于a的操作都指向局部变量a影响不了全局变量a,
所以13行输出1;第5行输出100;
浅显的理解就是参数就是引用变量的值,在函数内部进行加工,其实不改变变量的值;(这里是值类型的参数传递情况可以这么理解);
如果是引用类型的参数传递;就会影响到全局变量的值了;(这个和数据存储有关);