我试过这个:
function a_function(){
var data = "information";
});
console.log(data);
答案 0 :(得分:7)
你做不到。您需要在该范围之外创建一个变量并分配给它:
var data;
function a_function(){
data = "information";
});
a_function();
console.log(data);
另一个答案是提到了关于范围的学习。遵循这个建议,并尽早解决它,它将为您节省很多麻烦。
答案 1 :(得分:3)
技术上你可以,虽然它通常不是一个好主意:
function a_function() {
data = "information";
}
a_function();
console.log(data);
这样做的原因是,通过不使用var
关键字来声明变量,JavaScript(它是一个很好的小动态语言)正在写入&的data
属性#34;电流"对象,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);
基本上,一般来说,你想保持范围和控制流程,并试图避免"全局"在可能的情况下。
答案 2 :(得分:2)
您需要了解范围及其工作原理。
http://www.w3schools.com/js/js_scope.asp
https://en.wikipedia.org/wiki/Scope_%28computer_science%29#JavaScript
例如,函数中声明的变量仅存在于此函数中。一旦你超出这个功能,变量就会被删除,因此它是未定义的
答案 3 :(得分:1)
如果您要封送data
但在函数a_function
之外使用它,则需要返回data
并致电a_function
。这样的事情应该有效:
function a_function() {
var data = "information";
return data;
};
var data = a_function();
注意,由于范围,函数内的data
与函数外的data
不同。如果您未在函数外部创建名为data
的新var,则无法访问data
,因为它不存在于外部作用域中。
以下代码演示范围:
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
答案 4 :(得分:1)
您必须将值传递给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);
}
编辑:正如其他人所提到的,虽然我们可以告诉你所有这些方法,但最好更多地了解范围并理解人们建议工作方法的原因。