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

时间:2016-02-11 19:31:21

标签: javascript

我试过这个:

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

5 个答案:

答案 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);
}
编辑:正如其他人所提到的,虽然我们可以告诉你所有这些方法,但最好更多地了解范围并理解人们建议工作方法的原因。