5.1 head/全局对象概要
JavaScript代码本身必须包含在对象内部。例如,在web浏览器环境中编写JavaScript代码时,JavaScript被包含在window对象内,并在其内部执行。这个window对象被认为是”head”对象。JavaScript的所有实现都需要使用一种head对象。
myFunction = function(){};
console.log('myFunciton' in window);//true
! head对象是JavaScrit环境中可用的最高作用域/上下文。
5.2 head对象内的全局函数
decodeURL()
decodeURLComponent()
encodeURL()
encodeURLComponent()
evail()
isFinite()
isNaN()
parseFloat()
parseInt()
5.3 head对象与全局属性,全局变量
不要将head对象与包含在全局作用域的全局属性或全局变量混淆在一起。head对象是一个包含所有对象的对象。术语”全局属性”或”全局变量”指的是直接包含在head对象内部的值,而不是在其他的对象的特定作用域内。这些值被认为是全局性的,因为不管代码当前在哪里执行,根据作用域规则,所有的代码都可以访问(通过作用域链)这些全局属性/变量。
var foo = 'bar';
var myFuntion = fucntion(){var foo2 = 'bar');
var myApp = function(){
var run = function(){
console.log(foo)
}();
}
myApp(); //foo
//如果console.log(foo2),则显示undefined.因为它不在全局作用域内了
全局作用域的任何东西都可用于任何作用域,从而获得”全局变量”或”全局属性”的头衔。
5.4 引用head对象
通常有两种引用 head 对象的方法。第一种方法是简单地引用赋予 head 对象的名称(浏览器中的window);第二种方法是在全局作用域中使用 this 关键字。
var foo = 'bar';
windowRer1 = window;
windowRer2 = this;
console.log(windowRer1, windowRer2);
console.log(windowRer1.foo, windowRer2.foo);
5.5 head对象是隐式的,通常不显式引用
var foo = {
fooMethod: function(){
alert('foo'+'bar');
window.alert('foo'+'bar');
}
}
! 采用显式在性能方面所需要的代价稍高一些。即使我们知道想要的属性在全局作用域中,但如果只依靠作用域链,并避免显式的引用head对象,会更快。
UML 图:
可以渲染序列图:
或者流程图:
- 关于 序列图 语法,参考 [这儿][4],
- 关于 流程图 语法,参考 [这儿][5].