根据我的理解,词汇范围是名称空间的一个子集。命名空间和词法范围之间有什么关系?
答案 0 :(得分:1)
命名空间是代码的组织单位。通常,它们是通过使用对象文字的属性在JavaScript中实现的,但是有更复杂的实现。
简单示例:
var myApp = {}; // Root 'namespace'.
myApp.services = {}; // 'Namespace' for service constructor functions.
myApp.controllers = {}; // 'Namespace' for controller constructor functions.
myApp.controllers.UserController = function() { /* ... */ };
// Usage.
var userController = new myApp.controllers.UserController();
词法范围是一个完全正交的概念,它涉及一段代码中变量的可见性。范围由JavaScript中的函数定义。非常现代的JavaScript实现还包括块作用域的机制,但是你不会经常在野外看到它。
示例:
function f() {
var x = 'foo';
}
console.log(x); // undefined because the scope of x is the function f.