Javascript 捕获声明中没有吊装?

Javascript 捕获声明中没有吊装?,javascript,hoisting,Javascript,Hoisting,我有以下代码: 作用{ var-ex; 试一试{ 抛出新的错误“废话”; }卡塞克斯{ console.log'exi here:',ex; } console.log'ex out here:',ex; 返回“hi”; } 此代码的行为如下 (function() { var ex1; try { throw new Error('blah'); } catch(ex2) { console.log('ex i here:', ex2);

我有以下代码:

作用{ var-ex; 试一试{ 抛出新的错误“废话”; }卡塞克斯{ console.log'exi here:',ex; } console.log'ex out here:',ex; 返回“hi”;
} 此代码的行为如下

  (function() {
   var ex1;
   try {
       throw new Error('blah');
   } catch(ex2) {
       console.log('ex i here:', ex2);
   }
   console.log('ex out here:', ex1);

   return 'hi';
  })()
这是因为在catch中声明的第二个ex仅对catch的作用域可见,以获取更多信息


关于循环,在这些迭代中,js查找包含它的最近作用域的变量i声明,在本例中,它是父级,因此正在更改的变量i是在Begging声明的变量,因为反循环中没有变量声明。

此代码的行为如下所示

  (function() {
   var ex1;
   try {
       throw new Error('blah');
   } catch(ex2) {
       console.log('ex i here:', ex2);
   }
   console.log('ex out here:', ex1);

   return 'hi';
  })()
这是因为在catch中声明的第二个ex仅对catch的作用域可见,以获取更多信息


关于循环,在这些迭代中,js寻找包含它的最近作用域的变量i声明,在本例中,它是父变量,因此正在更改的变量i是在beggining中声明的变量,因为反循环中没有变量声明。

您把一些事情搞糟了

定义为var的变量具有函数作用域。catch中的参数未被提升,它仅在该catch部分具有阻塞范围

正如您在本例中所看到的:ab被提升,然后可以在锁销部件外部接近。ex2在上下文之外不存在

作用{ var-ex; 试一试{ 抛出新的错误“废话”; }catchex2{ var ab=3; log'ex is here:',ex2.message; } console.logab; console.logex2; console.log'ex out here:',ex; 返回“hi”;
} 你把事情搞砸了

定义为var的变量具有函数作用域。catch中的参数未被提升,它仅在该catch部分具有阻塞范围

正如您在本例中所看到的:ab被提升,然后可以在锁销部件外部接近。ex2在上下文之外不存在

作用{ var-ex; 试一试{ 抛出新的错误“废话”; }catchex2{ var ab=3; log'ex is here:',ex2.message; } console.logab; console.logex2; console.log'ex out here:',ex; 返回“hi”; } 发件人:

当在try块中抛出异常时,异常变量(例如catch e中的e)保存由throw语句指定的值。您可以使用此标识符获取有关引发的异常的信息。此标识符是catch子句的本地标识符。也就是说,它是在输入catch子句时创建的,在catch子句完成执行后,标识符不再可用

发件人:

当在try块中抛出异常时,异常变量(例如catch e中的e)保存由throw语句指定的值。您可以使用此标识符获取有关引发的异常的信息。此标识符是catch子句的本地标识符。也就是说,它是在输入catch子句时创建的,在catch子句完成执行后,标识符不再可用


catchex该ex为您确定了作用域。catch中可能存在的ex副本不是一个声明的变量,而是一个参数,它实际上隐藏了您的exvar@KirkLarkin我不这么认为。。。这与异常“parameter variable”无关@Noitidart shadowing意味着这些参数与外部范围中的变量不同。即使它们具有相同的名称,参数也是不同的,并且您不再能够从外部范围访问相同名称的变量。在您的示例中,两个名为ex的变量是两个不同的变量-一个在外部范围内,另一个是参数。catchex表示ex的作用域为您。catch中的ex的可能重复项不是声明的var,而是一个参数,它实际上隐藏了您的exvar@KirkLarkin我不这么认为。。。这与异常“parameter variable”无关@Noitidart shadowing意味着这些参数与外部范围中的变量不同。即使它们具有相同的名称,参数也是不同的,并且您不再能够从外部范围访问相同名称的变量。在您的示例中,两个名为ex的变量是两个不同的变量-一个在外部范围内,另一个是参数。这太棒了,谢谢。我试图让变量在作用域之外可用。我很困惑为什么没有吊装。这太棒了,谢谢。我试图让变量在作用域之外可用。我不明白为什么没有吊装。