JS中作用域以及变量范围分析
变量作用域
js作为一门脚本语言,他与c,java这些语言是不相同的。
全局变量
在js中声明全局变量,有狼蚁网站SEO优化几种方式
1.在函数外通过var来声明。
var test ="hello"; console.log(test); function a(){ test="xx"; console.log(test); } a(); console.log(test);
结果
hello
xx
xx
这种方式通过声明的变量在任何地方都可进行修改和使用。
2.在函数中隐士的声明变量
function a(){ test=22; console.log(test); } a(); console.log(test);
结果
22
22
因为js是弱类型脚本语言,在使用之前无需定义,所以可以通过这种方式也能声明全局变量。
来看一个反例
var test="aa"; console.log(test); function a(test){ test=22; console.log(test); } a(test); console.log(test);
结果
aa
22
aa
可以看到在函数中修改了test值可是第二次在函数外打印的值没有变。这是因为在函数的过程中只是进行了值传递。局部变量覆盖掉了全局变量,只是局部变量 在 修改。
因为在函数的参数内定义的变量并不是全局变量。
反例二
function a(){ var test="aa"; console.log(test); } a(); console.log(test);
结果
aa
notdefine
在函数内通过var来声明的变量是局部变量,函数外无法访问。
变量作用域
js的作用域和c与java这些语言的作用域也不相同,骚小孩在以前经常会因为这个而头疼,后来在认真学习了以后才懂了。
1.js中没有块范围。
if(1!=1){ var y=c; } console.log(y) if(1==1){ var x=a; } console.log(x);
结果
undefine
a
可以看到在if代码块定义的两个变量,在if块之外去打印,如果判断成功的话,才会去执行里边的声明语句,声明语句执行了,那么在代码块外边就可访问到了。
也可以看出在代码块中声明的变量也是全局变量。
2.js中的全局变量都会成为window的属性
var x=0; console.log(window.x);
结果
0
3.变量提升
var c=0; function a(){ console.log(c); } a();
结果
0
var c=0; function a(){ console.log(c); var c=11; } a();
结果
undefine
可以看出在函数中加了一行声明语句结果就会不同,这产生这样的原因是什么呢?
其实第二个代码块的执行顺序是这样的
var c=0; function a(){ var c; console.log(c); c=11; } a();
在函数中他会先把声明语句提升到第一行,并不提升赋值。然后局部变量覆盖全局变量,在打印c的时候局部变量还没来的
及赋值所以就是undefine。
变量提升不只会提升会执行的变量,不会执行的变量也会进行提升
var c=10; function a(){ console.log(c); if(false) { var c = 10; } } a();
结果
undefine
因为在if判断中定义了局部变量c,虽然if条件不成立,也会进行变量提升,所以打印c也是undefine;
4.let变量
通过上面的例子可以看到用var来定义变量的弊端
1.var定义的变量没有块作用域;
2.var定义的全局变量会自动添加全局window对象的属性;
3.var变量会提前装载(变量提升);
let就是为了解决这些问题而诞生的。
for(let i=0;i<5;i++){ } console.log(i);
结果
报错
在代码块中定义了let变量,在外部引用的时候不会存在。即存在块作用域。
let i=10; console.log(window.i);
结果
undefine
let声明的变量并不会成为window的属性。
var c=10; function a(){ console.log(c); let c=1; console.log(c); } a();
在函数中存在变量与全局变量名相同的c,会覆盖掉全局变量c,由于let不会提前装载,所以在第一个打印语句打印c时会报错。
到此这篇关于JS中作用域以及变量范围分析的文章就介绍到这了,更多相关JS变量作用域内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO!
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程