0

nodejs全局变量

 2 years ago
source link: https://www.fly63.com/article/detial/11818
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

node内置全局变量

在nodeJs中,全局变量有两个:

1、"__filename":表示当前正在执行的脚本的文件名,可输出文件所在位置的绝对路径。
2、"__dirname":表示当前执行脚本所在的目录。

__filename

__filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。 如果在模块中,返回的值是模块文件的路径。

实例:创建文件 main.js ,代码如下所示:

// 输出全局变量 
__filename 的值console.log( __filename );

执行 main.js 文件,代码如下所示:

$ node main.js
/web/com/runoob/nodejs/main.js

__dirname

__dirname 表示当前执行脚本所在的目录。

实例:创建文件 main.js ,代码如下所示:

// 输出全局变量
__dirname 的值console.log( __dirname );

执行 main.js 文件,代码如下所示:

$ node main.js
/web/com/runoob/nodejs

node自定义全局变量

在 Node.js 中有两种创建全局变量的方法:

(1)使用 global 对象,
(2)使用 module.export 。

较小的应用使用 global 对象,大型应用使用 module.export。

方法一:使用global 对象

Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它。

定义全局变量的方法:

global.变量名="变量值";

访问全局变量的方法:

global.变量名

如果你熟悉浏览器中的 JavaScript 环境,global 对象和 Window 对象相似。接下来做一些测试:

> global.name
undefined
> global.name = 'fly63 前端网'
'fly63 前端网'
> global.name
'fly63 前端网'
> GLOBAL.name
'fly63 前端网'
> (node:14432) [DEP0016] DeprecationWarning: 'GLOBAL' is deprecated, use 'global'
delete global.name
true
> global.name
undefined
> GLOBAL.name
undefined
> name = "fly63"
'fly63'
> GLOBAL.name
'fly63'
> var age = 23
undefined
> GLOBAL.age
23
①可以看出,GLOBAL 其实是 global 的一个别名。name == global.name == GLOBAL.name
②无论是使用 var 声明的变量,还是未使用 var 声明的变量都添加到了 global 对象上。
③然而,有一点不同之处在于,在你创建的模块中,使用 var 关键字声明的变量只属于这个模块,属于局部变量。那些未使用 var 关键字声明的变量则附加到 global 对象上。

在模块中全局声明的变量可以通过它的变量名直接被任何其他的模块引用,而不用通过 global 对象的引用;但是如果在模块内定义了和全局变量同名的局部变量,访问全局变量时就要加global了。

var city = 'nanjing';
console.log(global.city); // 'beijing'
console.log(city); // 'nanjing'
但是,别过度使用全局变量。

方法二:使用module.exports

还有一个方法 —— module.exports,让我用一个例子来证明:

main.js 中的内容:
exports.company = 'Google';
var m = require('./mod');
mod.js 中的内容:
var company = require('./main').company;
console.log(company);

现在来看看它怎么运作的:

$ node main.js
Google

注意:引用一个已经引用了另外一个模块的模块,只会创建一个包含前一个模块的引用,这并不意味着会严重增加内存的使用。同时,因为不存在真正的重复包含,模块中所有的初始化函数都不会重复执行一次。

链接: https://www.fly63.com/article/detial/11818


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK