File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 3333
3434本章接下来的部分会对这几点深入讲解。
3535
36- ================校对分割线================
3736
3837<a name =" a3 " ></a >
39- ## 减少全局对象
38+ ## 减少全局变量
4039
41- JavaScript 使用函数来管理作用域 ,在一个函数内定义的变量称作“局部变量”,局部变量在函数外部是不可见的。另一方面 ,“全局变量”是不在任何函数体内部声明的变量,或者是直接使用而未声明的变量。
40+ JavaScript使用函数来管理作用域 ,在一个函数内定义的变量称作“本地变量”,本地变量在函数外部是不能被访问的。与之相对 ,“全局变量”是不在任何函数体内部声明的变量,或者是直接使用而未声明的变量。
4241
43- 每一个JavaScript运行环境都有一个“全局对象”,不在任何函数体内使用this就可以获得对这个全局对象的引用。你所创建的每一个全局变量都是这个全局对象的属性。为了方便起见,浏览器都会额外提供一个全局对象的属性window,(常常)用以指向全局对象本身。下面的示例代码中展示了如何在浏览器中创建或访问全局变量 :
42+ 每一个JavaScript运行环境都有一个“全局对象”,不在任何函数体内使用this就可以获得对这个全局对象的引用。你所创建的每一个全局变量都是这个全局对象的属性。为了方便起见,浏览器会额外提供一个全局对象的属性 ` window ` ,(一般)指向全局对象本身。下面的示例代码展示了如何在浏览器中创建或访问全局变量 :
4443
45- myglobal = "hello"; // antipattern
44+ myglobal = "hello"; // 反模式
4645 console.log(myglobal); // "hello"
4746 console.log(window.myglobal); // "hello"
4847 console.log(window["myglobal"]); // "hello"
4948 console.log(this.myglobal); // "hello"
5049
5150<a name =" a4 " ></a >
52- ### 全局对象带来的困扰
51+ ### 全局变量的问题
5352
54- 全局变量的问题是,它们在JavaScript代码执行期间或者整个web页面中始终是可见的 。它们存在于同一个命名空间中,因此命名冲突的情况时有发生 ,毕竟在应用程序的不同模块中,经常会出于某种目的定义相同的全局变量。
53+ 全局变量的问题是,它们在整个JavaScript应用或者是整个web页面中是始终被所有代码共享的 。它们存在于同一个命名空间中,因此命名冲突的情况会时有发生 ,毕竟在应用程序的不同模块中,经常会出于某种目的定义相同的全局变量。
5554
56- 同样,常常网页中所嵌入的代码并不是这个网页的开发者所写 ,比如:
55+ 同样,在网页中嵌入不是页面开发者编写的代码是很常见的 ,比如:
5756
5857- 网页中使用了第三方的JavaScript库
5958- 网页中使用了广告代码
6059- 网页中使用了用以分析流量和点击率的第三方统计代码
61- - 网页中使用了很多组件, 挂件和按钮等等
60+ - 网页中使用了很多组件、 挂件和按钮等等
6261
63- 假设某一段第三方提供的脚本定义了一个全局变量result。随后你在自己写的某个函数中也定义了一个全局变量result。这时,第二个变量就会覆盖第一个,这时就会导致第三方脚本停止工作 。
62+ 假设某一段第三方提供的脚本定义了一个全局变量result。随后你在自己写的某个函数中也定义了一个全局变量result。这时,第二个变量就会覆盖第一个,会导致第三方脚本工作不正常 。
6463
65- 因此,为了让你的脚本和这个页面中的其他脚本和谐相处,要尽可能少的使用全局变量,这一点非常重要。本书随后的章节中会讲到一些减少全局变量的技巧和策略,比如使用命名空间或者立即执行的匿名函数等,但减少全局变量最有效的方法是坚持使用var来声明变量。
64+ 因此,为了让你的脚本和这个页面中的其他脚本和谐相处,要尽量少使用全局变量,这一点非常重要。本书随后的章节中会讲到一些减少全局变量的技巧和策略,比如使用命名空间或者即时函数等,但减少全局变量最有效的方法还是坚持使用` var ` 来声明变量。
65+ ================校对分割线================
6666
6767由于JavaScript的特点,我们经常有意无意的创建全局变量,毕竟在JavaScript中创建全局变量实在太简单了。首先,你可以不声明而直接使用变量,再者,JavaScirpt中具有“隐式全局对象”的概念,也就是说任何不通过var声明(译注:在JavaScript1.7及以后的版本中,可以通过let来声明块级作用域的变量)的变量都会成为全局对象的一个属性(可以把它们当作全局变量)。看一下下面这段代码:
6868
You can’t perform that action at this time.
0 commit comments