一、变量提升

  在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。上个简历的例子如:

	console.log(global); // undefined
var global = 'global';
console.log(global); // global function fn () {
  console.log(a); // undefined
  var a = 'aaa';
  console.log(a); // aaa
}
fn();

  之所以会是以上的打印结果,是由于js的变量提升,实际上上面的代码是按照以下来执行的:

	var global; // 变量提升,全局作用域范围内,此时只是声明,并没有赋值
console.log(global); // undefined
global = 'global'; // 此时才赋值
console.log(global); // 打印出global function fn () {
  var a; // 变量提升,函数作用域范围内
  console.log(a);
  a = 'aaa';
  console.log(a);
}
fn();

二、函数提升

  js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!如:

	console.log(f1); // function f1() {}
console.log(f2); // undefined
function f1() {}
var f2 = function() {}

  只所以会有以上的打印结果,是由于js中的函数提升导致代码实际上是按照以下来执行的:

	function f1() {} // 函数提升,整个代码块提升到文件的最开始
     console.log(f1);
console.log(f2);
var f2 = function() {}

  

结语:基本上就是这样,要熟练掌握的话可以多做些练习,test:

	console.log(f1());
console.log(f2);
function f1() {console.log('aa')}
var f2 = function() {}
	(function() {
  console.log(a);
  a = 'aaa';
  var a = 'bbb';
  console.log(a);
})();

  

  

最新文章

  1. GERBER文件
  2. NGUI之输入文本框的使用
  3. GO语言练习:channel select 超时机制
  4. OpenProcess打开进程返回错误的问题
  5. IEnumerable和IEnumerator 详解 (转)
  6. dedecms还原数据时要选对备份目录 不然会提示function文件出错
  7. lintcode : 跳跃游戏
  8. WPF-控件-编辑圆角TextBox
  9. hdu-2768-Cat vs. Dog(二分图-最大匹配数)
  10. editplus配置详:
  11. Launchpad灰色图标怎么删除?重置Launchpad教程
  12. IOS开发中UITableView(表视图)的滚动优化及自定义Cell
  13. Invalid bound statement (not found)解决方法
  14. verdi\debussy的使用技巧
  15. nginx 返回数据被截断
  16. 既然写CSS很容易,那为什么大家还是把CSS写的那么烂呢?
  17. 网络流 KM dinic
  18. Django 配置
  19. Hadoop整理三(Hadoop分布式计算框架MapReduce)
  20. TP框架中session操作

热门文章

  1. 找到第k个最小元----快速选择
  2. mysql join 和left join 对于索引的问题
  3. 让 asp.net 在 mac 上飞
  4. 全球HTTPS时代已来,你跟上了吗?
  5. 提高代码质量系列之二:重构小技巧——if篇
  6. [译]基于GPU的体渲染高级技术之raycasting算法
  7. Entity Framework 6 Recipes 2nd Edition(13-8)译 -> 把昂贵的属性移到其它实体
  8. java -version 问题
  9. datepickerx设置默认日期
  10. Python标准模块--itertools