在文章Show love to the object literal中,它说:
当页面中有多个脚本时,如果全局变量和函数的名称重复,则会被覆盖。


  一种解决方案是使变量
  作为属性,作为方法
  对象,然后通过
  对象名称。


但这是否可以防止变量进入全局名称空间的问题?

<script>
    var movie = {
        name: "a",
        trailer: function(){
           //code
        }
    };
</script>


在上面的代码中,哪些元素被添加到了全局名称空间?
a)只是对象名称-movie
b)对象名称及其内部的属性和方法– movie, movie.name, movie.trailer()

最佳答案

movie将存在于全局名称空间中(在浏览器中:window)。在movie范围内存在:nametrailer。如果尝试从全局对象执行trailerwindow.trailer()将导致ReferenceError: trailer is not defined),则可以看到此信息。 trailer只能使用movie.trailer()(或window.movie.trailer())执行。

Javascript具有词法范围,又称静态范围,意思是:


程序中特定位置的标识符始终引用相同的变量位置-“始终”表示“每次执行包含表达式的时间”,并且
可以通过静态检查该标识符所在的源代码上下文来确定它所指向的变量位置,而不必考虑整个程序的执行流程1。


1 Source

08-04 00:42