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

最新文章

  1. Struts2实现ajax的两种方式
  2. 【python】函数
  3. nginx php rewrite配置
  4. 以太坊只能合约摸索——第一关,ubuntu开发环境部署
  5. js操作DOM动态添加和移除事件
  6. Android动画的实现原理 .
  7. 昂贵的聘礼(dijkstra)
  8. 如何用js获取当前url的参数值
  9. 【Java】List的三种遍历方法
  10. hadoop 关闭进程时报错no 进程 to stop
  11. Multiplepack coming~^.^
  12. iframe动态创建及释放内存
  13. 安装SVN报无法访问windows installer服务。
  14. python_日历
  15. Spring Boot常用注解总结
  16. 国内安装helm
  17. intellij idea无效的发型版本1.8解决方案
  18. [Umbraco] 入门教程(转)
  19. 【读书笔记】iOS-自动布局
  20. SharePoint 2013 开启访问请求 链接丢失

热门文章

  1. 通过PHP获取文件创建与修改时间
  2. ArrayList中contains,remove方法返回为false的原因
  3. OpenCV 入门示例之三:AVI 视频播放控制
  4. python 基础 5.1 python 构造器
  5. python 基础1.1--windows/linux 下安装python
  6. 五个知识体系之-SQL学习-第三天
  7. 【BZOJ1316】树上的询问 点分治+set
  8. EasyPlayerPro Windows播放器实时流进行本地缓冲区即时回放功能实现
  9. 九度OJ 1177:查找 (字符串操作)
  10. Git 重写历史 filter-branch