Javascript 函数作用域和提升

2024-01-05

我刚刚读了一篇很棒的文章JavaScript 作用域和提升 作者:Ben Cherry http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting他给出了以下例子:

var a = 1;

function b() {
    a = 10;
    return;

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

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

我仍然不确定为什么它返回“1”。他说的一些话浮现在我的脑海里,比如: 所有函数声明都被提升到顶部。您可以使用函数来确定变量的范围。仍然不适合我。


函数提升意味着函数被移动到其作用域的顶部。那是,

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 scope
function b() {  
   var a = function () {}; //defines "a" in local scope 
   a = 10;                 //overwrites local variable "a"
   return;      
}       
b();       
alert(a);                 //alerts global variable "a"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 函数作用域和提升 的相关文章

随机推荐