为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript函数范围和提升

Javascript函数范围和提升

Javascript函数范围和提升我刚刚阅读了一篇关于Ben Cherry的JavaScript范围和提升的精彩文章,其中他给出了以下示例:var a = 1;function b() {     a = 10;     return;     function a() {}}b();alert(a);使用上面的代码,浏览器将发出“1”警报。我仍然不确定它为什么会返回“1”。他说的一些事情就像是:所有的功能声明都被提升到顶部。您可以使用函数来调整变量的范围。仍然没有为我点击。
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

功能提升意味着功能被移动到其范围的顶部。那是,

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"


查看完整回答
反对 回复 2019-05-29
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

你必须要记住的是它解析整个函数并在执行之前解析所有变量声明。所以....

function a() {}

真的变成了

var a = function () {}

var a 强制它进入局部范围,变量范围是通过整个函数,因此全局变量仍然是1,因为你已经通过使它成为一个函数而声明了一个局部范围。


查看完整回答
反对 回复 2019-05-29
?
翻阅古今

TA贡献1780条经验 获得超5个赞

函数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只在本地范围内进行设置,而不是全局变量。


查看完整回答
反对 回复 2019-05-29
  • 3 回答
  • 0 关注
  • 559 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信