当名称与Node.js中的参数名称相同时,如何从函数访问全局变量?

时间:2016-03-13 21:43:19

标签: javascript node.js scope global

如果名称与Node.js中的参数名称相同,如何从函数访问全局变量?

set.seed(12039)
NX <- 20
DF <- as.data.frame( matrix(rnorm(100*NX), ncol = NX))
DF$y <- rnorm(100)

lm(y~., data = DF)
# Call:
# lm(formula = y ~ ., data = DF)
# 
# Coefficients:
# (Intercept)           V1           V2           V3           V4           # V5           V6           V7           V8  
#   -0.059471     0.038887    -0.024053    -0.131015    -0.086795    # -0.159099    -0.269060     0.099055    -0.092254  
#          V9          V10          V11          V12          V13          # V14          V15          V16          V17  
#   -0.080832     0.006313     0.068917    -0.030187     0.279635     # 0.038846    -0.071679     0.112288    -0.007563  
#         V18          V19          V20  
#    0.030256     0.163070     0.020152

1 个答案:

答案 0 :(得分:2)

假设您正在讨论node.js模块,您的第一个name变量实际上并不是全局的 - 它只是在模块的更高范围内(在模块级别定义)。因此,无法在Javascript中具有相同名称的参数的函数内访问它。

您必须更改两个冲突名称中的一个或另一个的名称,才能访问这两个名称。

var name = null;

// change the name of the argument
function func(aname) {
     name = aname;
}

func("Bob");
console.log(name);   // "Bob"

如果它实际上是node.js中的全局,那么您可以使用global前缀访问它,如下所示:

global.name = "Bob";

function func(name) {
    global.name = name;
}

function("Alice);
console.log(global.name);   // "Alice"

仅供参考,一般情况下,我会远离名为name的全局变量。如果这是浏览器代码,则已经存在window.name冲突。

这是little primer on actual using global variables in node.js(通常不推荐)。在node.js中建议共享导出的属性/变量/方法。