欢迎!从2017年开始,将慢慢的不在xmind上写总结了,全部转到博客中!这里将不再随便写写,将继承在xmind的精神,继续前行!!!

函数 进阶学习之三 一个简单而又复杂的问题

 

//题目一:
var a = 1;
function foo() {
  alert(a);
};
foo();

//题目二:
var a = 1;
function foo() {
  if (!a) {
    var a = 2;
  }
  alert(a);
};
foo();

//题目答案:第一个弹出1  第二个弹出2
/*
*对于第二个;按照一般的思路:
*1.创建了全局变量 a,定义其值为 1
*2.创建了函数 foo
*3.在 foo 的函数体内,if 语句将不会执行,因为 !a 会将变量 a 转变成布尔的假值,也就是 false
*4.跳过条件分支,alert 变量 a,最终的结果应该是输出 1
*/
//看起来无懈可击的推理啊,但让人惊讶的是:答案竟然是 2!

 

问题分析
首先我要告诉你这不是什么错误,而是 JavaScript 语言解释器的一个(非官方的)特性,某人把这个特性叫做:Hoisting(目前尚未有标准的翻译,比较常见的是提升)。

发现此处有一个变量声明和赋值,于是解析器会将其声明提升至当前作用域的顶部(这是默认行为,并且无法更改),这个行为就叫做 Hoisting。

 

链接:理解Hoisting 以及 为什么是 2的问题http://www.jb51.net/article/75090.htm

posted @ 2017-01-26 11:45  拐进web的奋斗者  阅读(130)  评论(0编辑  收藏  举报