如何定义常量在全局范围内nodejs

JavaScript06

如何定义常量在全局范围内nodejs,第1张

如果正在使用一系列node模块,或许是一个像Express.js一样的框架,突然需要使用几个全局变量。怎样在nodejs里创建全局变量呢?

对此最常见的建议是“不使用‘var’关键字声明一个变量”或“给object对象添加一个变量”或“给OBJECT对象添加一个变量”。你会使用哪种方式呢?

首先,让分析下global对象。打开一个终端,启动一个node命令提示界面:

[plain] view plain copy print?

$ node

>

在命令提示界面下看看关于global的所有信息:

[plain] view plain copy print?

>global

那是一个超级大的对象!事实上,看到了node的核心。所有在node进程里的对象都挂在这个对象上。如果非常熟悉javascript所在的浏览器环境,global对象是等同于window对象。

现在已经指导global对象是声明

[plain] view plain copy print?

>global.name

undefined

>global.name = 'El Capitan'

>global.name

'El Capitan'

>GLOBAL.name

'El Capitan'

>delete global.name

true

>GLOBAL.name

undefined

>name = 'El Capitan'

'El Capitan'

>global.name

'El Capitan'

>GLOBAL.name

'El Capitan'

>var name = 'Sparrow'

undefined

>global.name

'Sparrow'

令人兴奋的观察!

global和BLOBAL看起来是一个同一个东西且是一回事。确实,Global是global一个别名。

感兴趣的是一个使用还是不使用var关键字声明的变量附加到global对象上。在node里创建一个全局变量的最基本的方式就是通过不使用var关键字声明一个变量。这种做法与使用一个模块(module)略有不同

当启动一个node进程,将会启动一个模块,那么所有的模块将会被包含在它里面,所有模块都共享同一个global对象。应用上面的测试观察结合实际,你就会明白全局变量怎样在node里工作。然而有些轻微的变化,如果使用var关键字声明的变量将会保留在本地模块里;这些声明的变量没有附加到global对象里。

那么现在已经知道”没有使用var关键字声明的变量“,”向global里添加一个变量“,”给GLOBAL对象添加一个变量“,所有这些都是一回事。

在一个module里全局声明的变量能够被其他任何模块使用它们的名字来引用,没必要从global对象引用它们。但是这不意味这你就可以这样做。为什么呢?请看这样:

[plain] view plain copy print?

var company = 'Yahoo'

console.log(global.company)// 'Google'

console.log(company)// 'Yahoo'

当使用global.company时,知道使用的是全局变量,但是它的备用名字company在module是当作局部变量来使用的。

如果打算在你的node应用里使用全局变量,那么讨论的创建变量方法会工作的很好。然而,请不要过度使用它。话虽如此,还有可以不使用全局对象的替代解决方案吗?

是的,有这么一个,它涉及到module.exports的使用。使用例子来演示:

File: main.js

[plain] view plain copy print?

exports.company = 'Google'

var m = require('./mod')

File: mod.js

[plain] view plain copy print?

var company = require('./main').company

console.log(company)

现在看看执行结果:

[plain] view plain copy print?

$ node main.js

Google

这样就实现了,一个其他模块的的变量可以在另外的模块中使用他而没有使用global对象。可以include main.js在其他的module来访问company名字。

注意:引用(include)一个已经被其他模块引用过的模块时,仅仅创建一个指向之前包体的引用,因此这意味着不会极度消耗内存。也因为没有重新创建一个真正的包体,在module里的所有初始化方法没有再执行。

因此,一个包体中,有2钟创建node全局变量的方法,一个是使用global对象,另一个是使用modules.exports。global方法适用小的应用,modules.exprots适用于大的应用。

变量是赋值后可以重新赋值的;而常量是定义后就不能修改它的值。

比如在 js 中,可以使用var 或 let 定义变量:

var a=3

a=4

let b=4

b=5

常量:

const c=5

c=6//这里会报错,因为常量不能重新赋值

如图:

JavaScript基本数据结构

JavaScript提供脚本语言的编程与C++非常相似 它只是去掉了C语言中有关指针等容易产生的错误 并提供了功能强大的类库 对于已经具备C++或C语言的人来说 学习JavaScript脚本语言是一件非常轻松愉快的事

一 JavaScript代码的加入

JavaScript的脚本包括在HTML中 它成为HTML文档的一部分 与HTML标识相结合 构成了一个功能强大的Internet网上编程语言 可以直接将JavaScript脚本加入文档

<Script Language = JavaScript >JavaScript语言代码 JavaScript 语言代码</Script>

说明   通过标识<Script></Script>指明JavaScript脚本源代码将放入其间   通过属性Language = JavaScript 说明标识中是使用的何种语言 这里是JavaScript语言 表示在JavaScript中使用的语言

下面是将JavaScript脚本加入Web文档中的例子:l<HTML><Head><Script Language = JavaScript >document Write( 这是赛迪网互动学校 )document close()</Script></Head></HTML>

在浏览器的窗口中调用l 则显示 这是赛迪网互动学校 字串 见图 所示

图 说明: Document write()是文档对象的输出函数 其功能是将括号中的字符或变量值输出到窗口 document close()是将输出关闭 可将<Script></Script>标识放入head></Head>或<Body></Body>之间 将JavaScript标识放置<Head></Head>在头部之间 使之在主页和其余部分代码之前装载 从而可使代码的功能更强大 可以将JavaScript标识放置在<Body></Body>主体之间以实现某些部分动态地创建文档

二 基本数据类型

JavaScript脚本语言同其它语言一样 有它自身的基本数据类型 表达式和算术运算符以及程序的基本框架结构 JavaScript提供了四种基本的数据类型用来处理数字和文字 而变量提供存放信息的地方 表达式则可以完成较复杂的信息处理

基本数据类型

在JavaScript中四种基本的数据类型 数值(整数和实数) 字符串型(用 号或 括起来的字符或数值) 布尔型(使True或False表示)和空值 在JavaScript的基本类型中的数据可以是常量 也可以变量 由于JavaScript采用弱类型的形式 因而一个数据的变量或常量不必首先作声明 而是在使用或赋值时确定其数据的类型的 当然也可以先声明该数据的类型 它是通过在赋值时自动说明其数据类型的

常量  整型常量JavaScript的常量通常又称字面常量 它是不能改变的数据 其整型常量可以使用十六进制 八进制和十进制表示其值  实型常量实型常量是由整数部分加小数部分表示 如 可以使用科学或标准方法表示 E e 等

布尔值

布尔常量只有两种状态 True或False 它主要用来说明或代表一种状态或标志 以说明操作流程 它与C++是不一样的 C++可以用1或0表示其状态 而JavaScript只能用True或False表示其状态

字符型常量

使用单引号( )或双引号( )括起来的一个或几个字符 如 This is a book of JavaScript ewrt 等  空值JavaScript中有一个空值null 表示什么也没有 如试图引用没有定义的变量 则返回一个Null值  特殊字符同C语言一样 JavaScript中同样以有些以反斜杠(/)开头的不可显示的特殊字符 通常称为控制字符   变量

变量的主要作用是存取数据 提供存放信息的容器 对于变量必须明确变量的命名 变量的类型 变量的声明及其变量的作用域  变量的命名JavaScript中的变量命名同其计算机语言非常相似 这里要注意以下两点 A 必须是一个有效的变量 即变量以字母开头 中间可以出现数字如test text 等 除下划线(-)作为连字符外 变量名称不能有空格 (+) (-) ( )或其它符号 B 不能使用JavaScript中的关键字作为变量 在JavaScript中定义了40多个类键字 这些关键是JavaScript内部使用的 不能作为变量的名称 如Var int double true不能作为变量的名称 在对变量命名时 最好把变量的意义与其代表的意思对应起来 以免出现错误

变量的类型

在JavaScript中 变量可以用命令Var作声明:var mytest该例子定义了一个mytest变量 但没有赋予它的值 Var mytest= This is a book 该例子定义了一个mytest变量 同时赋予了它的值 在JavaScript中 变量以可以不作声明 而在使用时再根据数据的类型来确其变量的类型 如 x= y= xy= True cost= 等 其中x整数 y为字符串 xy为布尔型 cost为实型  变量的声明及其作用域JavaScript变量可以在使用前先作声明 并可赋值 通过使用var关键字对变量作声明 对变量作声明的最大好处就是能及时发现代码中的错误 因为JavaScript是采用动态编译的 而动态编译是不易发现代码中的错误 特别是变量命名的方面 对于变量还有一个重要性──那就是变量的作用域 在JavaScript中同样有全局变量和局部变量 全局变量是定义在所有函数体之外 其作用范围是整个函数 而局部变量是定义在函数体之内 只对其该函数是可见的 而对其它函数则是不可见的 三 表达式和运算符

1 表达式

在定义完变量后 就可以对它们进行赋值 改变 计算等一系列操作 这一过程通常又叫称一个叫表达式来完成 可以说它是变量 常量 布尔及运算符的集合 因此表达式可以分为算术表述式 字串表达式 赋值表达式以及布尔表达式等

2 运算符

运算符完成操作的一系列符号 在JavaScript中有算术运算符 如+ * /等 有比较运算符如!= ==等有逻辑布尔运算符如!(取反) | ||有字串运算如+ +=等 在JavaScript主要有双目运算符和单目运算符 其双目运算符由下列组成 操作数1 运算符 操作数2即由两个操作数和一个运算符组成 如 + This + that 等 单目运算符 只需一个操作数 其运算符可在前或后 (1)算术运算符JavaScript中的算术运算符有单目运算符和双目运算符 双目运算符 +(加) (减) *(乘) /(除) %(取模) |(按位或) &(按位与) <<(左移) >>(右移) >>>(右移 零填充) 单目运算符 (取反) ~(取补) ++(递加 ) (递减 ) (2)比较运算符比较运算符它的基本操作过程是 首先对它的操作数进行比较 尔后再返回一个true或False值 有8个比较运算符:<(小于) >(大于) <=(小于等于) >=(大于等于) ==(等于) !=(不等于) (3)布尔逻辑运算符在JavaScript中增加了几个布尔逻辑运算符: !(取反) &=(与之后赋值) &(逻辑与) |=(或之后赋值) |(逻辑或) ^=(异或之后赋值) ^(逻辑异或) ?:(三目操作符) ||(或) ==(等于) |=(不等于) 其中三目操作符主要格式如下 操作数?结果1 结果2若操作数的结果为真 则表述式的结果为结果1 否则为结果2

四 范例 下面是一个跑马灯效果的JavaScript文档

l<><head><script Language= JavaScript >var msg= 这是一个跑马灯效果的JavaScript文档 var interval = var spacelen = var space = var seq= function Scroll() { len = msg lengthwindow status = msg substring( seq+ )seq++if ( seq >= len ) { seq = spacelenwindow setTimeout( Scroll ()interval )}elsewindow setTimeout( Scroll()interval )} function Scroll () { var out= for (i= i<=spacelen/space lengthi++) out += space out = out + msglen=out lengthwindow status=out substring(seq len)seq++if ( seq >= len ) { seq = }window setTimeout( Scroll ()interval )} Scroll()</script><body></body></>

lishixinzhi/Article/program/Java/JSP/201311/19285