说我有:
a = {}
a.x // would return "undefined"
但是我可以
b = a.x
控制台只返回undefined
。
但是,如果我有:
a // would throw an error saying "ReferenceError: a is not defined"
我不能拥有
b = a // console throws tantrum insisting "ReferenceError: a is not defined"
有什么区别?毕竟两者都是undefined
。为什么第一个没有抛出错误?
答案 0 :(得分:0)
为了让自己更清楚:
╭────────────────────┬────────────────────────┬───────────────────────╮
| Resolution | Property Resolution | Variable Resolution |
╞════════════════════╪════════════════════════╪═══════════════════════╡
| Subjective | Objects | LexicalEnvironment |
|────────────────────|────────────────────────|───────────────────────|
| Rule of Procession | Follow Prototype Chain | Follow Scope Chain |
└────────────────────┴────────────────────────┴───────────────────────┘
感谢@RobG。引用他提供的有用的link:
本规范中使用了两种环境记录值:声明性环境记录和对象环境记录。声明性环境记录用于定义ECMAScript语言语法元素的效果,例如FunctionDeclarations,VariableDeclarations和Catch子句,它们直接将标识符绑定与ECMAScript语言值相关联。对象环境记录用于定义ECMAScript元素的效果,例如Program和WithStatement,它们将标识符绑定与某个对象的属性相关联。