JavaScript的语言特性 — 作用域

前端技术 everyinch 2549℃ 0评论

所有的面向对象语言都有某种形式的作用域(scope)。在JavaScript里,作用域是由函数划分的,而不是由块(block)划分(例如while,if和for语句)的。下面的代码演示了根据函数划分作用域

// 设置全局变量 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" );

通过上面的代码可以看到,变量都在全局作用域中。在基于浏览器的JavaScript中,所有术语全局作用域的变量都是window对象的属性(property)。

// 全局作用域变量
var test = "test";

// 全局变量和 window 对象的 test 属性是一致的
alert( window.test == test );

最后,让我们看看当变量缺乏声明时会是什么情况。在JavaScript中,如果变量没有显式定义,它就是全局定义的,虽然它可能只在这个函数作用域的范围内使用。

// 一个设置了 foo 值的函数
function test() {
    foo = "test";
}

//调用此函数以设置 foo 的值
test();

// 我们发现 foo 现在是在全局作用域下
alert( window.foo == "test" );
分享&收藏

转载请注明:陈童的博客 » JavaScript的语言特性 — 作用域

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
'; } if( dopt('d_footcode_b') ) echo dopt('d_footcode'); ?>