nodejs仅在函数和子函数中变量

时间:2014-05-23 20:20:00

标签: javascript node.js variables scope

我正在尝试多次同时运行相同的函数但如果我创建一个var variablename的本地函数,则子函数不会识别它。如果我将其设为全局,则函数的所有实例都将覆盖它。

function vladimir(){
var test="hello";
hanspeter();
}
function hanspeter(){
console.log(test);
}

console.log输出undefined。

3 个答案:

答案 0 :(得分:0)

使用函数参数:

function vladimir(){
    var test="hello";
    hanspeter(test);
}
function hanspeter(arg){
    console.log(arg);
}

https://learn.jquery.com/javascript-101/functions/

答案 1 :(得分:0)

你在这里遇到了一个范围问题。

当您在不使用var(function <function_name>() {})的情况下声明方法时,这些函数声明将移动到本地范围的顶部(如果要查找它,则称为函数提升)。

如果您手动声明函数,则必须等到它们都被声明为止才能使用它们。这是因为第一个函数不知道在它下面声明的任何函数。

您还遇到了一个问题,即变量没有作用域。如果你有一个在一个函数中声明的变量,则不能保证在另一个函数中存在(因为它是一个不同的范围)。

如果你想传递这些变量,最简单的方法是将它们传递给函数参数,这些参数可以在你的其他函数中访问。

所以在你的简单例子中,你可以让它像这样工作:

var hanspeter = function (test) {
  console.log(test);
}

var vladimir = function() {
  hanspeter( "hello" );
}

答案 2 :(得分:0)

JavaScript使用词法范围 - 看起来你期待动态范围。本质上,这意味着函数可以根据声明的位置访问变量,而不是调用它的位置。例如,以下内容可行:

function vladimir(){
  var test="hello";
  function hanspeter(){
    console.log(test);
  }
  hanspeter();
}

因为test存在于声明hanspeter的地方。但是在你的test中存在hanspeter 被称为的地方,它不会让它访问。

您也可以通过传递变量来获取变量:

function vladimir(){
  var test="hello";
  hanspeter(test);
}
function hanspeter(test2){
  console.log(test2);
}

我将参数调用hanspeter test2来表明参数的名称是重要的,而不是传递的变量的名称。