惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Schneier on Security
The Last Watchdog
The Last Watchdog
Cyberwarzone
Cyberwarzone
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
The Cloudflare Blog
V
V2EX
博客园_首页
博客园 - 聂微东
Vercel News
Vercel News
人人都是产品经理
人人都是产品经理
G
GRAHAM CLULEY
T
Tenable Blog
Last Week in AI
Last Week in AI
Y
Y Combinator Blog
L
LINUX DO - 最新话题
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
SecWiki News
SecWiki News
博客园 - 三生石上(FineUI控件)
S
Secure Thoughts
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
T
Troy Hunt's Blog
博客园 - 【当耐特】
Forbes - Security
Forbes - Security
H
Hacker News: Front Page
A
About on SuperTechFans
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
罗磊的独立博客
D
DataBreaches.Net
P
Privacy & Cybersecurity Law Blog
Schneier on Security
Schneier on Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
D
Docker
P
Proofpoint News Feed

博客园 - zitiger

33.99-36.99 万,特斯拉 Model Y 售价公布 treegridview - zitiger - 博客园 1 老虎Sitemap生成器 0.5.3 老虎Sitemap生成器 0.5.2 老虎Sitemap生成器 0.3 老虎Sitemap生成器 0.2 诚聘ASP.NET开发人员[杭州] 老虎SEO助手 0.3 欢迎使用 老虎关键词排名查询器 v0.2.5 给金猪宝宝取名起名的策略和技巧 东北虎介绍 面向对象的 Javascript 语言特性:闭包 - zitiger 面向对象的 Javascript 函数重载和类型检查 面向对象的 Javascript 语言特性:引用 《搜索引擎优化SEO知识完全手册》在线阅读(一) 这种选项卡有现成的控件吗? 更换桌面壁纸的小工具。 关于Assembly.CreateInstance中被启动对象读取配置文件的问题
面向对象的 Javascript 语言特性:作用域
zitiger · 2007-06-08 · via 博客园 - zitiger
 

作用域

  作用域是JavaScript中一个较难处理的特性。所有面向对象的编程语言都有某种形式的作用域;这要看是什么上下文约束着作用域。在JavaScript里,作用域由函数约束,而不由块约束(如while,if,和for里的语句体)。最终可能使得一些代码的运行结果表面上显得怪异(如果你来自一种块作用域语言的话)。程序2-10的例子说明了“函数作用域代码”的含义。

  代码2-10. JavaScript中变量作用域是怎样工作的例子

//设置一个等于"test"的全局变量foo
var foo = "test";

//在if块中
if ( true ) {
    //设置foo为"new test"
    //注意:这仍然是在全局作用域中
    var foo = "new test";
}

//正如我们在此处可见,foo现在等于"new test"
alert( foo == "new test" );

//创建一个修改变量foo的函数
function test() {
    var foo = "old test";
}

//调用时,foo却驻留在是在函数的作用域里面
test();

//确认一下,foo的值仍然是"new test"
alert( foo == "new test" );

  在程序2-10中你会发现,变量位于在全局作用域。基于浏览器的JavaScript有趣的一面是,所有的全局变量实际上都是window对象的属性。尽管一些老版本的Opera浏览器或Safari浏览器不是这样,假定浏览器这样工作通常是一个很好的经验规则。程序2-11展示了一个这种例子。
  
  程序2-11. JavaScript的全局变量与window对象的例子

//全局变量,包含字符串"test"
var test = "test";

//你会发现,我们的全局变量和window的test属性是相同的
alert( window.test == test );

  最后,让我们来看看当一个变量漏定义时会怎样。程序2-12里,变量foo在test()的作用域里被赋值。但是,程序2-12里实际并没有(用var foo)定义变量的作用域。当变量foo没有明确定义时,它将成为全局变量,即使它只在函数的上下文使用。

  程序2-12. 隐式全局变量声明的示例

//一个为变量foo赋值的函数
function test() {
    foo = "test";
}

//调用函数为foo赋值
test();

//我们发现foo现在是全局变量了
alert( window.foo == "test" );

  到目前应该很明显,尽管JavaScript的作用域不如块作用域语言的严格,它还是相当强大和有特色的。尤其是与下节中叙述的闭包的概念结合起来时,JavaScript语言的强大将展露无遗。