在文章Show love to the object literal中,它说:
当我们在页面中有多个脚本时,全局变量&如果重复名称,函数将被覆盖。
一种解决方案是制作变量 作为属性和作为方法的功能 一个对象,并通过它访问它们 对象名称。
但这会阻止变量进入全局命名空间的问题吗?
<script>
var movie = {
name: "a",
trailer: function(){
//code
}
};
</script>
在上面的代码中哪些元素被添加到全局命名空间?
a)只是对象名称 - movie
b)对象名称以及其中的属性和方法 - movie, movie.name, movie.trailer()
答案 0 :(得分:3)
movie
将存在于全局命名空间中(在浏览器中:window
)。在movie
范围内存在:name
和trailer
。如果您尝试从全局对象执行trailer
(window.trailer()
将导致ReferenceError: trailer is not defined
),则可以看到此信息。 trailer
只能使用movie.trailer()
(或window.movie.trailer()
)执行。
Javascript有 lexical 范围,又名静态范围,意思是:
程序中特定位置的标识符始终引用相同的变量位置 - 其中“always”表示“每次执行包含的表达式”,以及
它引用的变量位置可以通过静态检查该标识符出现的源代码上下文来确定,而不必考虑整个程序的执行流程 1
1 Source