【发布时间】:2019-03-28 16:20:13
【问题描述】:
我有这个代码:
(function() {
var ex;
try {
throw new Error('blah');
} catch(ex) {
console.log('ex i here:', ex);
}
console.log('ex out here:', ex);
return 'hi';
})()
此日志:
ex i here: Error('blah');
在这里:未定义
为什么会这样?我认为由于提升,ex 会被设置在这个块范围之外,所以它应该在ex out here 中可用。
我希望它的工作方式类似于 for 循环:
for (i=0; i<2; i++) {
}
console.log(i); // gives 2
【问题讨论】:
-
catch(ex)ex适合你。 -
exin catch 不是声明的 var,它是一个参数,它实际上会影响您的exvar -
@KirkLarkin 我不这么认为......这与异常“参数变量”无关
-
@Noitidart 阴影意味着参数是与外部范围不同的变量。即使它们具有相同的名称,但参数是不同的,并且您不再可以从外部范围访问同名的变量。在您的示例中,名为
ex的两个变量是两个不同的变量——一个在外部范围内,一个是参数。
标签: javascript hoisting