【发布时间】:2014-02-26 14:52:38
【问题描述】:
多年来我一直在使用 JavaScript,但我刚刚发现这不会导致语法错误:
http://jsfiddle.net/DerekL/V5wNu/
{
var a = "Hello";
alert("Hello world");
}
console.log(a); //"Hello world"
虽然没有块作用域,但它仍然像{} 不存在一样工作。
我认为{} 是一个对象字面量,它在里面接受的只是:
{
key: content
get function(){ ... }
set function(){ ... }
}
但 JavaScript 解释器似乎知道它们是脚本,它只是像往常一样执行它。
我知道JS中有一些关键字会被解释器忽略掉,比如
javascript:
如果你将它添加到代码行中:
var a = "Hello";
javascript: console.log(a); //this will work
它仍然有效。
但是根据这个逻辑,如果{a: "b"} 有效,为什么a: "b" 无效?
【问题讨论】:
-
虽然只有函数作用域,但这并不意味着没有块。他们只是不创建自己的范围。
-
JS 还没有块范围。它很可能 - 如果不确定 - 成为 ECMAScript 1.6 (Harmony) 的一部分:it introduces the
letkeyword -
即使这有效,也并不意味着它是有效的。将在每个验证器上抛出错误。
标签: javascript