`
javatoyou
  • 浏览: 1019328 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

面向对象的 Javascript 语言特性:作用域

 
阅读更多
作用域

  作用域是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语言的强大将展露无遗。

分享到:
评论

相关推荐

    Javascript面向对象编程

    Javascript的重要性 使用率 1、在web应用中,涉及到前端界面编程基本上都要用到javascript语言; 2、Web2.0及Ajax推动了javascript语言。...他具有面向对象语言所特有的各种特性,比如封装、继承及多态等。但对于

    JavaScript函数式编程

    JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、...

    JavaScript核心概念及实践 高清PDF扫描版 (邱俊涛).pdf

     1.2 JavaScript语言特性   1.3 JavaScript应用范围  第2章 基本概念   2.1 数据类型   2.2 变量   2.3 运算符  第3章 对象   3.1 JavaScript对象   3.2 使用对象   3.3 对象字面量   ...

    javascript 变量作用域 代码分析

    作用域(scope)是javascript中一项令人棘手的的特性。所有面向对象编程语言都有某种形式的作用域,不过和把这个概念放在什么上下文中有关。在javascript里,作用域是由函数划分的。

    JavaScript权威指南(第6版)(附源码)

    3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 ...

    JavaScript 中级笔记 第三章

    基于浏览器的JavaScript语言有一门有趣的特性是,所有属于全局作用域的变量都是window对象的属性。 看下面代码: [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 我们再上例的基础上,再添加一个函数来修改

    JavaScript权威指南(第6版)

    3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 ...

    JavaScript权威指南(第6版)(中文版)

    3.10 变量作用域 第4章 表达式和运算符 4.1 原始表达式 4.2 对象和数组的初始化表达式 4.3 函数定义表达式 4.4 属性访问表达式 4.5 调用表达式 4.6 对象创建表达式 4.7 运算符概述 4.8 算术表达式 4.9 关系表达式 ...

    JavaScript权威指南(第6版)中文文字版

    3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 ...

    JavaScript权威指南(第6版)中文版pdf+源代码

     1.1 JavaScript语言核心8  1.2 客户端JavaScript12  第一部分 JavaScript 语言核心  第2章 词法结构25  2.1 字符集25  2.2 注释27  2.3 直接量27  2.4 标识符和保留字28  2.5 可选的分号30  第3章 类型、...

    JavaScript 权威指南(第四版).pdf

     1.1 JavaScript语言核心8  1.2 客户端JavaScript12  第一部分 JavaScript 语言核心  第2章 词法结构25  2.1 字符集25  2.2 注释27  2.3 直接量27  2.4 标识符和保留字28  2.5 可选的分号30  第3章 类型、...

    javaScript函数式编程

    JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量...

    JavaScript权威指南(第6版)

    3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 ...

    JavaScript权威指南(第6版) 中文版

    3.10 变量作用域 56 第4章 表达式和运算符 60 4.1 原始表达式 60 4.2 对象和数组的初始化表达式 61 4.3 函数定义表达式 62 4.4 属性访问表达式 63 4.5 调用表达式 64 4.6 对象创建表达式 64 4.7 运算符概述 65 4.8 ...

    JavaScript权威指南(第六版) 清晰-完整

    1.1 JavaScript语言核心 1.2 客户端JavaScript 第一部分 JavaScript 语言核心 第2章 词法结构 2.1 字符集 2.2 注释 2.3 直接量 2.4 标识符和保留字 2.5 可选的分号 第3章 类型、值和变量 3.1 数字 3.2 文本 3.3 布尔...

    Java语言基础下载

    面向对象的主要特性 18 抽象(Abstraction) 18 封装(Encapsulation): 19 多态(Polymorphism) 20 面向对象的优点 22 面向对象的分析、设计和编程 23 面向对象语言的发展简史 26 内容总结 29 独立实践 30 第三章:面向...

    javascript使用闭包模拟对象的私有属性和方法

    最近因为做了一个项目,其中涉及到了js私有方法,这个概念在其语言里面是很常见的,很多语言都有private这个关键字,只要在一个类的前面加上private就表示申明了一个私有方法,但是javascript在面向对象的方面没有...

    深入浅出ES6 简体中文

    当然,新的语言体系也在之前的基础上查漏补缺:弥补块级作用域变量缺失的let和const关键字;弥补面向大型项目缺失的模块方案;标准委员会甚至为JavaScript增加了类特性,有关这一方面的特性褒贬不一,Douglas ...

Global site tag (gtag.js) - Google Analytics