在javascript中的其他函数之外使用局部变量

在javascript中的其他函数之外使用局部变量,javascript,Javascript,我试过这个: function a_function(){ var data = "information"; }); console.log(data); 你不能。您需要在该范围之外创建一个变量并分配给它: var data; function a_function(){ data = "information"; }); a_function(); console.log(data); 另一个回答提到了学习范围。遵循这条建议,并尝试尽早

我试过这个:

function a_function(){   
    var data = "information";      
});
console.log(data);

你不能。您需要在该范围之外创建一个变量并分配给它:

var data;
function a_function(){   
    data = "information";      
});
a_function();
console.log(data);

另一个回答提到了学习范围。遵循这条建议,并尝试尽早解决它,这将在将来为你节省很多麻烦。

你做不到。您需要在该范围之外创建一个变量并分配给它:

var data;
function a_function(){   
    data = "information";      
});
a_function();
console.log(data);
另一个回答提到了学习范围。遵循这一建议,并尝试尽早解决它,这将在将来为您节省大量的麻烦。

如果您希望对数据进行电子封装,但在函数a\u函数之外使用它,则需要返回数据并调用函数a\u。像这样的方法应该会奏效:

function a_function() {
  var data = "information";
  return data;
};

var data = a_function();
注意,由于范围的原因,函数内的数据与函数外的数据不同。如果不在函数外部创建名为data的新var,则将无法访问数据,因为它不在外部作用域中

以下代码演示了范围:

function a_function() {
  var data = "information";
  return data;
};

var data = "different information";
var data2 = a_function();
console.log(data);
console.log(data2);
代码的输出将产生:

different information
information
如果要对数据进行ecapsulate,但在函数a_函数之外使用它,则需要返回数据并调用函数a_。像这样的方法应该会奏效:

function a_function() {
  var data = "information";
  return data;
};

var data = a_function();
注意,由于范围的原因,函数内的数据与函数外的数据不同。如果不在函数外部创建名为data的新var,则将无法访问数据,因为它不在外部作用域中

以下代码演示了范围:

function a_function() {
  var data = "information";
  return data;
};

var data = "different information";
var data2 = a_function();
console.log(data);
console.log(data2);
代码的输出将产生:

different information
information

您需要了解范围及其工作原理


例如,函数中声明的变量仅存在于该函数中。一旦超出此范围,变量将被删除,因此它是未定义的

您需要了解范围及其工作方式

例如,函数中声明的变量仅存在于该函数中。一旦超出此功能,变量将被删除,因此从技术上讲,它是未定义的,尽管这通常不是一个好主意:

之所以这样做是因为,通过不使用var关键字来声明变量,JavaScript是一种很好的小动态语言,它正在写入当前对象(即window)的数据属性。因此,可以全球访问。这基本上相当于这样做:

function a_function() {
    window['data'] = "information";
}
a_function();
console.log(window['data']);
正如我所说,这通常不是一个好主意。其他方法包括返回值:

function a_function() {
    var data = "information";
    return data;
}
var data = a_function();
console.log(data);
或者在更大范围内创建值并在函数中设置:

var data;
function a_function() {
    data = "information";
}
a_function();
console.log(data);
基本上,一般来说,您希望保持范围和控制流,并尽可能避免全局性。

从技术上讲,您可以这样做,但这通常不是一个好主意:

之所以这样做是因为,通过不使用var关键字来声明变量,JavaScript是一种很好的小动态语言,它正在写入当前对象(即window)的数据属性。因此,可以全球访问。这基本上相当于这样做:

function a_function() {
    window['data'] = "information";
}
a_function();
console.log(window['data']);
正如我所说,这通常不是一个好主意。其他方法包括返回值:

function a_function() {
    var data = "information";
    return data;
}
var data = a_function();
console.log(data);
或者在更大范围内创建值并在函数中设置:

var data;
function a_function() {
    data = "information";
}
a_function();
console.log(data);

一般来说,您希望维护作用域和控制流,并尽可能避免全局变量。

您必须将值传递给console.log调用共享的作用域中的变量,如:

var data;
function a_function(){   
    //note the ommission of the 'var' keyword
    data = "information";      
});
a_function();
console.log(data);
或者,您必须让函数返回该值,并将其用作log方法的输入:

function a_function(){   
    var data = "information";
    return data;
}
console.log(a_function());
或者将console.log调用包装在函数从其作用域调用的帮助函数中,并将数据作为参数传递:

function log(data){
     console.log(data);
}

function a_function(){   
    var data = "information";
    log(data);
}

编辑:正如其他人所提到的,虽然我们可以告诉你所有的方法来做到这一点,但最好了解更多关于范围的知识,并理解人们建议的方法为什么有效

您必须将值传递给console.log调用共享的作用域中的变量,如:

var data;
function a_function(){   
    //note the ommission of the 'var' keyword
    data = "information";      
});
a_function();
console.log(data);
或者,您必须让函数返回该值,并将其用作log方法的输入:

function a_function(){   
    var data = "information";
    return data;
}
console.log(a_function());
或者将console.log调用包装在函数从其作用域调用的帮助函数中,并将数据作为参数传递:

function log(data){
     console.log(data);
}

function a_function(){   
    var data = "information";
    log(data);
}

编辑:正如其他人所提到的,虽然我们可以告诉你所有的方法来做到这一点,但最好了解更多关于范围的知识,并理解人们建议的方法为什么有效

多花一点代码或对你想要实现的东西的进一步描述将不胜感激。多花一点代码或对你想要实现的东西的进一步描述将不胜感激。说真的,这是编程101。不过我感觉很慷慨——我们都必须从某个地方开始!您不需要提前声明数据变量。当你调用函数时,数据会自动变成全局变量。是的,但我认为这样做是不好的做法way@FixerRB这是一种可怕的做法,只有在非严格模式下才允许,因为向后兼容
原因太多了。别这么做。说真的,这是编程101。不过我觉得很慷慨——我们都必须从某个地方开始!您不需要提前声明数据变量。当你调用函数时,数据会自动变成全局变量。是的,但我认为这样做是不好的做法way@FixerRB这是一种可怕的做法,因为向后兼容的原因,只允许在非严格模式下使用。不要这样做。