一尘不染

Javascript函数作用域和提升

javascript

我刚刚读了Ben Cherry撰写的有关JavaScript范围和提升,他提供了以下示例:

var a = 1;

function b() {
    a = 10;
    return;

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

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

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


阅读 429

收藏
2020-04-22

共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"
2020-04-22