下面是我的代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1 id="message"></h1>
<script src="traceur/traceur.js"></script>
<script src="traceur/BrowserSystem.js"></script>
<script src="traceur/bootstrap.js"></script>
<script type="module">
var x = 'outer scope';
(function() {
console.log(x); //Expected undefined, got undefined ! this is as expected.
var x = 'inner scope';
}());
//same as above, but changed to var to let and x to y
let y = 'outer scope';
(function() {
console.log(y); //Was expecting ReferenceError here, but got undefined. WTF ??!!!
let y = 'inner scope';
}());
</script>
</body>
</html>
如果在声明之前使用了let-var,es6中的临时放置区(TDZ)似乎应该抛出一个referenceError。
但是,在此示例中,我的 let 未定义。我哪里错了?
解决这个问题很久了,浪费了一天的时间。(任何指针都会很有帮助)。我正在使用 Chrome v58。
v58在当前浏览器下根据https://kangax.github.io/compat-table/es6/具有 es6 兼容性)。
我剥离了 traceur 部分并发布在 babel-try it out 上,得到了相同的结果。
我想知道为什么它在我的 chrome v58 中不起作用。也许它还需要其他东西?