如何解决为什么我不能在此简单函数中访问此变量?
我是Java语言的新手,我不明白在以下代码中作用域是如何工作的:
//Code n°1:
let num = 1;
function test(){
console.log(num);
}
test() //As I expected I get in console "1"
//Code n°2:
let num = 1;
function test(){
let num = 2;
console.log(num);
}
test() //As I expected I get in console "2"
但这是问题所在:
//Code n°3:
let num = 1;
function test(){
console.log(num)
let num = 2;
console.log(num);
}
test() //I expected to get in console "1" and then "2" but instead I get an error.
当我在浏览器中运行代码n°3 Im时出现此错误: 未捕获的ReferenceError:初始化之前无法访问词法声明'num'
如果我看代码1和2,我想在运行代码3之后,我将在控制台中看到数字1,然后是数字2。但这没有发生。为什么?
非常感谢您!
解决方法
JavaScript异常“初始化前无法访问词法声明'variable'”发生在初始化词法变量之前。当在定义之前访问let或const声明时,这会在任何块语句中发生。
,如果在没有重新声明的情况下初始化变量,它将正常工作,现在,如果重新声明变量,则使用 let 或 var ,因为在同一范围内,它是由以前的 console.log()调用的。
不建议您重新声明 let 变量,如果需要,请不要在上一个语句中使用相同的变量,请注意,如果对第一个 console.log()进行注释, ,代码将再次运行,这恰好在此范围内的变量生存期内发生,在这种情况下为 let
let num = 1;
function test(){
console.log(num)
let num = 2;
console.log(num);
}
test()
,
因为 JavaScript 函数和用 var 声明的变量被提升,移到函数/词法块的顶部。
但是让关键字尊重词汇流。它在声明变量的地方固定变量。
console.log 尝试访问流中声明的变量。 因此,手动将您的 let 声明移至 de console.log 之上或将其更改为 var let num = 2;让 javascript 引擎自动移动它。
var num = 1;
function test(){
let num = 2;
console.log(num);
}
test()
或
var num = 1;
function test(){
console.log(num)
var num = 2;
console.log(num);
}
test()
或者,获取对全局变量 num 的访问权限,该变量被来自测试主体、var 或 let 的声明所遮蔽
var num = 1;
function test(){
console.log(num)
//let num = 2;
console.log(num);
}
test()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。