不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window ,全局作用域的变量实际上被绑定到window 的一个属性:

'use strict';//严格模式var course = 'Learn JavaScript';
alert(course); // 'Learn JavaScript'
alert(window.course); // 'Learn JavaScript

因此,直接访问全局变量course 和访问window.course 是完全一样的。
因此,顶层函数的定义也被视为一个全局变量,并绑定到window 对象:

'use strict';function foo() {alert('foo');
}foo(); // 直接调用foo()
window.foo(); // 通过window.foo()调用

进一步大胆地猜测,我们每次直接调用的alert() 函数其实也是window 的一个变量:

'use strict';window.alert('调用window.alert()');
// 把alert保存到另一个变量:
var old_alert = window.alert;
// 给alert赋一个新函数:
window.alert = function () {}
alert('无法用alert()显示了!');
// 恢复alert:
window.alert = old_alert;
alert('又可以用alert()了!');

这说明JavaScript实际上只有一个全局作用域。任何变量(函数也视为变量),如果没有在当前函数作用域中找到,就会继续往上查找,最后如果在全局作用域中也没有找到,则报ReferenceError 错误。

全局变量会绑定到window 上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字顶层函数,都会造成命名冲突,并且很难被发现。

减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中。

例如:

// 唯一的全局变量MYAPP:
var MYAPP = {};// 其他变量:
MYAPP.name = 'myapp';
MYAPP.version = 1.0;
// 其他函数:
MYAPP.foo = function () {return 'foo';
};

把自己的代码全部放入唯一的名字空间MYAPP 中,会大大减少全局变量冲突的可能

许多著名的JavaScript库都是这么干的:jQuery,YUI,underscore等等。

JavaScript的全局作用域、全局对象window相关推荐

  1. javaScript变量、作用域链

    变量 JavaScript 变量松散类型的本质,决定了它只是在特定时间用于保存特定值的一个名字而已. 变量分为基础类型值和引用类型值: 基本类型值指的是 简单的数据段(Undefined.Null.B ...

  2. JavaScript基础08-day10【函数的返回值、实参、立即执行函数、方法、全局作用域、函数作用域、提前声明、this、工厂方法创建对象、构造函数】

    学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...

  3. javascript中作用域、全局作用域、局部作用域、隐式全局变量、块级作用域、作用域链、预解析

    作用域 作用域指的是代码的作用范围,按照作用域划分变量可分为全局变量和局部变量:作用域可分为: 全局作用域: 指全局变量作用的范围:全局变量指的是通过var在函数外面声明的变量,在js中任何位置都可以 ...

  4. python 3.28 第三章 函数嵌套/名称空间//内置名称空间/全局名称空间/局部名称空间/作用域/函数对象/闭包函数。...

    1 函数嵌套: 函数内可以调用了其他的函数. # def max2(x,y):# if x > y:# return x# else:# return y## def max3(x,y,z):# ...

  5. javascript 全局作用域,函数作用域详解(配图解)

    函数作用域,我们可以理解为:就是一块"地盘",一个代码段所在的区域,他是静态的(相对于执行上下文对象),在编写代码时就确定了. 分类:全局作用域,函数作用域 作用:隔离变量,在不同 ...

  6. javascript的浏览器Bom详解,window、location、history对象

           BOM(BrowserObjectModel)也叫浏览器对象模型,描述与浏览器进行交互的方法和接口.BOM由多个对象组成, 其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对 ...

  7. JavaScript——执行环境、变量对象、作用域链

    前言 这几天在看<javascript高级程序设计>,看到执行环境和作用域链的时候,就有些模糊了.书中还是讲的不够具体.通过上网查资料,特来总结,以备回顾和修正. 目录: EC(执行环境或 ...

  8. js中的全局作用域和局部的作用域

    全局作用域 1.全局作用域:全局作用域中有一个全局对象window ,它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用, 2.在全局作用域中:创建的变量都会作为window对象的属性保存,创 ...

  9. c/c++中全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域的区别与联系

    C++ 变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为 6 种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域. 从作用域看: 全局变量具有全局作用域.全 ...

最新文章

  1. 多视图立体几何PatchMatchStereo:DSI与Cost Volume
  2. oracle根据_分割字符串,oracle分割字符串函数
  3. Animator动画XML实现
  4. JQuery对象与DOM对象的区别与转换
  5. 三个等价c语言表达式,C语言习题综合(20页)-原创力文档
  6. Java摩托车汽车轮胎数量,摩托车轮子上的知识,你知道多少?
  7. Python+django网页设计入门(19):创建新模型扩展自带用户表的字段
  8. post 传递参数中包含 html 代码解决办法,js加密,.net解密
  9. 机器学习作业班_python实现逻辑回归多类分类
  10. 对测试认识的三个阶段
  11. matlab2018A配置cuda,使用教程 | matlab 2018a + cuda 10.1 + vs 2017
  12. 最简洁用EXCEL公式实现身份证验证
  13. Amazon ES现更名为Amazon OpenSearch Service并支持OpenSearch 1.0
  14. 31、查询 1990 年出生的学生名单
  15. 怎么翻译整个PDF文件
  16. apple开发者文档关于KVC和KVO文档的一些渣翻——这里是原地址
  17. 线性代数(二十四) : 行列式的展开式—拉普拉斯公式
  18. 2019清华计算机考研名单,2019清华大学研究生硕士考研拟录取名单
  19. Windows Embedded Standard 7 部署须知
  20. 最近10年内出现的计算机术语,记常见的计算机术语(不停更新)

热门文章

  1. i5 6600 HD530联想扬天S5250黑苹果
  2. 微博开放领域的事件抽取【持续更新】
  3. 蓝桥杯最终冲刺(冲刺Day2)
  4. 用JS来动态设置CSS样式
  5. [附源码]java+ssm计算机毕业设计个人所得税服务系统0dol2(源码+程序+数据库+部署)
  6. 3轴/6轴/9轴传感器是什么, 加速计/陀螺仪/磁力计又是什么?
  7. (android文档原创翻译)管理Activity的生命周期一
  8. 一条公链的坎坷进化路 |链捕手
  9. 教你创建qq好友桌面快捷方式
  10. 使用 apifm 插件进行 Flutter 云开发——QQ一键登录/注册