JavaScript变量的作用域全局变量
1.当在script中定义变量,在当前script中的定义前调用是undefined,没有定义该变量时调用报错。原因是在内存中开辟了该变量的存储位置,(当执行script时将所有定义的变量名先存到栈中)
当代码解释到该语句时才会将值存在栈中,没有执行之前调用该变量就是undefined,如果没有定义就不会在内存中开辟存储位置,因此就会报错。
2.如果在上一个script中调用下面的script的变量时,这时候不但没有值,而且没有开辟存储空间。因此,在上一个script中调用下面的变量永远都是报错的。
3.一旦定义变量完成后,在后面的script中都是可以任意调用,因为这些变量都是全局变量。
<script> console.log(xx); //在另一个script中调用,而且调用后面的定义变量内容 会报错 </script> <script> console.log(xx); //undefined xx变量名存在栈中,但还没有赋值 var xx = 1; console.log(xx); //xx是全局变量后面可以正常调用 </script> <script> console.log(xx); //xx=1 可以调用到 </script>
全局变量VS 局部变量
/*全局变量 就是在script标签下直接使用var定义的变量, 全局变量可以应用于所有的代码中调用获取.范围非常大 局部变量 就是在函数中使用var定义的变量,仅用于当前函数的执行范围内 低耦合(减少耦合度)*/ function fn1() { // 这里使用var定义的变量是有作用域的,他的范围仅限于该函数内部 // 函数运行完成后,函数内定义的变量将会自动销毁 var c=10; //局部变量 c+=3; console.log(c); //函数中修改全局变量后,全局变量就完成了修改,外面调用时,也是修改后的 xx+=10; } fn1(); //xx=11 fn1(); //xx=21 console.log(xx,"______"); //21
全局变量和局部变量的重名
//全局变量和局部变量的重名 var s1=10; function fn2() { /* (局部变量和全局变量重名,在函数中局部会覆盖全局) * 如果在函数中定义了某个局部变量名,那么在该函数中所有这个变量都是局部变量 * 不能通过直接使用变量名的方法调用到外部的全局变量了 * */ var s1=20; s1+=20; //40 window.s1+=10; //如果全局变量的名称在函数中和局部变量名相同,想要调用全局变量时,加上window前缀 console.log(‘全局变量s1--->‘,window[‘s1‘]); //全局变量也可以这样调用 console.log(s1); //局部变量 40 } fn2(); console.log(s1); //全局变量s1 10 var s2=10; function fn3() { //console.log(s2);//undefined,因为在函数中一旦第一局部变量,该函数中所有位置都是局部变量 s2+=10; console.log(s2);//NaN,undefined+10 var s2=20; } fn3();
原文地址:https://www.cnblogs.com/XJT2018/p/11051159.html
时间: 2024-10-04 15:08:27