js中变量声明提前
2024-09-05 17:27:24
demo1:
var a=10; function b(){alert(a); var a=20; alert(a)} b()//undefined 20
因为:js编译器在执行b这个函数时,会把函数中声明的变量提前到最前面进行声明;上面的函数b等同于:
function b(){var a; alert(a); a=20; alert(a);}
不难看出最终的结果就是 undefined 20
demo2:
var a=10; function b(){alert(a); a=20; alert(a);} b()// 10 20
js在执行函数b时,在函数自身作用域内没有找到变量a的声明,就向上查找,找到全局变量a,所以第一个10; 再b中给全局变量a重新赋值。所以第二次是20;
demo3:
var a=10; function b(){ a=20; return; function a(){} } b(); alert(a);//
因为:
js在执行函数b时,虽然定义a函数之前已经return了,但是js编译器会把function a(){} 编译成 var a=function(){};
js变量声明提前,所以在函数b中也有自己的局部变量a,在赋值的时候就直接赋值函数内部的局部变量,而不会改变全局
变量a了,所以最终的执行结果是10;
demo4:
var a=10; function b(){ a=20; return ; a=30; } b(); alert(a);//20; return 之后的代码不执行
demo5:
var a=10; function b(){ a=20; return ; var a=30; } b(); alert(a);//10;
声明变量提前,b有自己的局部变量a,就不会修改全局变量a的值,所以最终的值是10
最新文章
- Struts2实现ajax的两种方式
- 【python】函数
- nginx php rewrite配置
- 以太坊只能合约摸索——第一关,ubuntu开发环境部署
- js操作DOM动态添加和移除事件
- Android动画的实现原理 .
- 昂贵的聘礼(dijkstra)
- 如何用js获取当前url的参数值
- 【Java】List的三种遍历方法
- hadoop 关闭进程时报错no 进程 to stop
- Multiplepack coming~^.^
- iframe动态创建及释放内存
- 安装SVN报无法访问windows installer服务。
- python_日历
- Spring Boot常用注解总结
- 国内安装helm
- intellij idea无效的发型版本1.8解决方案
- [Umbraco] 入门教程(转)
- 【读书笔记】iOS-自动布局
- SharePoint 2013 开启访问请求 链接丢失