variables提升
alert(myVar1); return false; var myVar1;  以上代码在IE,FF和Opera中抛出错误,说明返回语句必须在函数中。 但它在Safari和Chrome中起作用(显示undefined )。 
上面的代码已经在全球范围内编写了。 除了所有的function。
任何原因?
在javaScript中,variables被移动到脚本的顶部,然后运行。 所以当你运行它会做
 var myVar1; alert(myVar1); return false; 
这是因为JavaScript没有真正的词汇范围的意义。 这就是为什么它被认为是最好的做法,使所有的variables声明在该地区的顶部,他们将被用来防止起重造成一个问题。 JSLint会呻吟。
这是一个很好的文章,解释它http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Histing
退货是无效的。 如果你想做一个真正的提升的例子(从上面的链接采取)做
 var foo = 1; function bar() { if (!foo) { var foo = 10; } alert(foo); } bar(); 
这将提醒10
编辑后评论
以下是我的理解,我已经在某处读过,但是找不到所有我读过的来源,所以我可以改正。
这警报感谢JavaScript JIT的差异。 TraceMonkey( http://ejohn.org/blog/tracemonkey/ )我相信会采取JavaScript,做一个快速的静态分析,然后做JIT,然后尝试运行它。 如果失败了,那显然没有什么用。
V8不做静态分析和移动到JIT然后运行这样的东西。 它更类似于Python。 如果您在Chrome中的开发者控制台(ctrl + shift + j)中运行该脚本,它将抛出一个错误,但也运行给你警报。
有时候,起重的解释方式可能会给人以错误的印象,也就是说,JavaScript引擎提升了variables和函数,就好像它们被移动到最顶层一样,这是不正确的,如下面的代码所示:
 console.log(a); var a = 'Hello World!'; 
 我们在控制台上看到的是undefined ,而不是'Hello World' ,所以我们得到了以下代码的行为 
 var a; console.log(a); a = 'Hello World!'; 
不是行为的
 var a = 'Hello World!'; console.log(a); 
您可能会从variables和函数声明移到顶级语句中获得印象。
 但是JavaScript实际上并不是在任何地方移动你的代码 您需要了解JavaScript中的执行上下文。 它有两个阶段创build阶段和执行阶段。 在创build阶段为这些variables和函数创build内存空间,人们似乎混淆了这一步与提升。  JavaScript实际上并没有将你的代码移动到任何地方,JavaScript会为你的所有代码(即variables和函数)创build内存空间,函数可以完全放在内存中,但是在variables的情况下,分配在执行上下文的执行阶段被处理。 所以当你做var a = 'Hello World!'  ,JavaScript引擎知道它在执行上下文的执行阶段开始执行时的价值,所以它将占位符置为未定义,并且所有variables最初都被设置为在JavaScript中未定义。 所以依靠吊装看不明确。 所以在代码之上声明variables和函数总是好的。 
ECMA-262第3版第12.9节(第75页)指出:
如果ECMAScript程序包含不在FunctionBody内的
return语句,则ECMAScript程序在语法上被认为是不正确的。
 也就是说,函数之外的return是语法错误 。 如果发生语法错误 ,则不运行代码。 想想你的例子,如果你写了: 
 alert(myVar1); return false; syntax error)))))))))))))))))); 
另外,第16节(第157页)指出:
一个实现可能会将以下types的运行时错误的任何实例视为语法错误,因此应及早报告:
- 不正确的使用返回,中断和继续。
  Firefox的引擎等。 人。  (即那些允许在全局范围内return JavaScript实现) 可能是一致的,假设以下条款(在同一部分中)允许在全局范围内实现return实现定义: 
实施应按规定报告所有错误,但以下情况除外:
- 一个实现可以提供除本规范中描述的以外的其他types,值,对象,属性和函数。 这可能会导致构造(如在全局范围内查找variables)具有实现定义的行为,而不是引发错误(如ReferenceError )。
这段代码没什么意义:
-   var myVar1将永远不会运行。
-   return false;因为你不在函数中,所以不会返回任何东西
Opera,IE和FF是错误的,因为这个代码真的是无效的,因为除非你在函数中,否则你不能返回。
 如果它在Safari和Chrome中起作用,那么它必须是因为他们使用的JavaScript引擎已经准备好处理错误的代码。 我的猜测是,他们看到“ return ”,并放弃或取代某种break 。 
有关函数的更多信息: http : //www.w3schools.com/js/js_functions.asp
这是JavaScript的悬挂的事情,换句话说,我们正试图打印variables的值,这是没有任何价值
JavaScript将呈现上面的代码为: –
 var myVar1 alert (myVar1) return false