变量的声明

  1.变量声明具有提升机制,Javascript在执行时,会把所有的声明都提升到当前作用域前面。

  先看一下下面的例子:

(function(){
  alert(b)//b is not defined
  alert(a); //undefined
  var a = 200;
})()

  运行的结果分别是:b is not defined ; undefined

  分析: 变量a的声明被提前,所以最初代码相当于:

(function(){
  var a;//声明变量a
  alert(b)//b is not defined
  alert(a); //undefined
  a = 200; //(定义并)初始化变量a
})()

  b不用解释,因为找不到b,所以会报错。a是应为声明被提前了,所以可以找到a,但变量a并没有赋值,所以会输出undefined.

作用域:(全局作用域、函数作用域、eval作用域、ES6块级作用域)

  1.  函数体内部,局部变量的优先级比同名的全局变量优先级高。

var a = 100;
(function(){
alert(a)//undefined
var a = 200;
alert(a)//
})()

  运行上面的例子可以输出: undefined;200。

  分析:第一个alert为什么会是undefined呢?这里有变量的两个知识点:第一个是变量声明会提前,第二个就是局部变量的优先级比同名全局变量优先级高。上面的代码相当于:

var a = 100;
(function(){
var a;
alert(a)//undefined
a = 200;
alert(a)//
})()

在函数作用域内,变量a的声明被提前了,函数外全局变量a被函数内变量a覆盖。所以会输出undefined;第二个输出200是因为a=200被赋值的原因。

  2. ECMA2015 没有块级作用域,只有函数作用域和全局作用域 (ECMA2016 引入块级作用域)

var a = 100;
if(true){
alert(a);//
var a = 200;
alert(a);//
}

上面代码输出结果为:100,200。说明javascript是没有块级作用域的。javasctipt中唯一拥有作用域的结构的是函数function

综上:下面的代码的输出结果就好理解了

var a = 100;
var b = 200;
function test(){
alert(a); //undefined
alert(b); //
b = 300;
alert(b); //
var a = 1;
alert(a); //
}
test();

最新文章

  1. 烂泥:ubuntu 14.04搭建OpenVPN服务器
  2. 【DWR系列02】-DWR逆向Ajax即服务器推送
  3. linux----------ab--性能测试工具
  4. iOS自动布局进阶用法
  5. css用标签选择器在本页写样式
  6. C#关于值类型和引用类型的备忘
  7. iOS开发:应用生命周期
  8. HTML5와 CSS3 적용기
  9. ExtJS4.2学习(6)——基础知识之proxy篇
  10. Chrome 插件自定义博客编辑界面
  11. c# 索引器方法
  12. 2017云计算开源峰会 你是想听Linux谈开源还是想听OpenStack谈开源?
  13. Linux多线程实践(三)线程的基本属性设置API
  14. Vue国际化处理 vue-i18n 以及项目自动切换中英文
  15. Java学习目录(持续更新中)
  16. VC++、MFC最好的开源项目
  17. HashTab---Windows资源管理器的文件属性窗口中添加了一个叫做”文件校验”的标签
  18. objdump和backtrace的配合使用
  19. mysql GRANT ALL PRIVILEGES 限制某个或所有客户端都可以连接至mysql
  20. 如何使用ffmpeg

热门文章

  1. JsTree中节点添加CheckBox 以及 单选的实现
  2. CAD使用SetxDataDouble写数据(网页版)
  3. 【转载】Spring注解@Resource和@Autowired区别对比
  4. 解决docker容器启动时候无法映射端口的问题
  5. 后台中的sql注入
  6. (转)MySQL中的索引详讲
  7. 一段简单的手写Java计算器代码
  8. css 实现鼠标滑过流光效果
  9. STL源码分析之第二级配置器
  10. Gym - 101670G Ice cream samples(CTU Open Contest 2017 尺取法)