JavaScript的语言特性 — 作用域
所有的面向对象语言都有某种形式的作用域(scope)。在JavaScript里,作用域是由函数划分的,而不是由块(block)划分(例如while,if和for语句)的。下面的代码演示了根据函数划分作用域[code lang="js"]
// 设置全局变量 foo,并置为 'test'
var foo = "test";
// 在 if 块内部
if ( true ) {
// 将 foo 置为 'new test'
// 注意:现在还在全局作用域中
var foo = "new test";
}
// 现在 fo 等于 'new test'
alert( foo == "new test" );
// 创建一个会修改变量 foo 的新函数
function test() {
var foo = "old test";
}
// 然而在调用时,foo 只在函数作用域内起作用
test();
// 这里确认了 foo 还是等于 'new test'
alert( foo == "new test" );
[/code]
通过上面的代码可以看到,变量都在全局作用域中。在基于浏览器的JavaScript中,所有术语全局作用域的变量都是window对象的属性(property)。
[code lang="js"]
// 全局作用域变量
var test = "test";
// 全局变量和 window 对象的 test 属性是一致的
alert( window.test == test );
[/code]
最后,让我们看看当变量缺乏声明时会是什么情况。在JavaScript中,如果变量没有显式定义,它就是全局定义的,虽然它可能只在这个函数作用域的范围内使用。
[code lang="js"]
// 一个设置了 foo 值的函数
function test() {
foo = "test";
}
//调用此函数以设置 foo 的值
test();
// 我们发现 foo 现在是在全局作用域下
alert( window.foo == "test" );
[/code]
查看完整版本: JavaScript的语言特性 — 作用域
Tags: