Javascript函数范围和提升

Javascript函数范围和提升

我刚刚阅读了一篇关于Ben Cherry的JavaScript范围和提升的精彩文章,其中他给出了以下示例:

var a = 1;function b() {
    a = 10;
    return;

    function a() {}}b();alert(a);

使用上面的代码,浏览器将发出“1”警报。

我仍然不确定它为什么会返回“1”。他说的一些事情就像是:所有的功能声明都被提升到顶部。您可以使用函数来调整变量的范围。仍然没有为我点击。


30秒到达战场
浏览 560回答 3
3回答

宝慕林4294392

功能提升意味着功能被移动到其范围的顶部。那是,function b() {      a = 10;      return;      function a() {} }将被重复者重写为此function b() {   function a() {}   a = 10;   return;}很奇怪,是吗?此外,在这种情况下,function a() {}表现得一样var a = function () {};所以,从本质上讲,这就是代码所做的事情:var a = 1;                 //defines "a" in global scopefunction b() {      var a = function () {}; //defines "a" in local scope     a = 10;                 //overwrites local variable "a"    return;      }       b();       alert(a);                 //alerts global variable "a"

婷婷同学_

你必须要记住的是它解析整个函数并在执行之前解析所有变量声明。所以....function a() {}真的变成了var a = function () {}var a 强制它进入局部范围,变量范围是通过整个函数,因此全局变量仍然是1,因为你已经通过使它成为一个函数而声明了一个局部范围。

翻阅古今

函数a内部悬挂功能b:var a = 1; function b() {     function a() {}     a = 10;     return;} b(); alert(a);这几乎就像使用var:var a = 1; function b() {     var a = function () {};    a = 10;     return;} b(); alert(a);该函数在本地声明,并且a只在本地范围内进行设置,而不是全局变量。
打开App,查看更多内容
随时随地看视频慕课网APP