如何在函数中使变量全局可用

时间:2016-05-24 02:47:06

标签: javascript

如果不将函数中的变量从函数中删除,我如何在函数中使变量可用,并将它们记录在控制台中?

function foo(){
  var one = 1;
  var two = 2; 
}

foo();
console.log(one, two);

6 个答案:

答案 0 :(得分:4)

要访问函数外部的变量,可以在函数外部声明它们。该功能仍然可以分配给他们。

var one, two;

function foo(){
  one = 1;
  two = 2; 
}

foo();
console.log(one, two);

或者,如果您只需要这些值,您可以让函数返回它们。

function foo(){
  var one = 1;
  var two = 2;
  return { one: one, two: two };
}

var result = foo();
console.log(result.one, result.two);

答案 1 :(得分:1)

解决方案:

#' Generate ggplot2 aesthetic mappings from data.frame columns
#' 
#' Use this like you would \code{aes()} or \code{aes_string()} but
#' pass in the \code{data.frame} you want to use for the mapping.
#' By default this will use all the column names from the input
#' \code{data.frame} so use column selections if you don't want 
#' to map them all.
#' 
#' @param df data.frame
aes_from_df <- function(df) {

  mapping <- setNames(as.list(colnames(df)), colnames(df))
  mapping <- lapply(mapping, function(x) {
    if (is.character(x)) parse(text = x)[[1]] else x
  })
  structure(ggplot2:::rename_aes(mapping), class="uneval")

}

rect <- data.frame(xmin=1, xmax=10, ymin=1,  ymax=10)

ggplot(rect, aes_from_df(rect)) + geom_rect()

示例:https://jsfiddle.net/xmm041df/1/

说明:

使用var时,您要为该范围声明变量。在你的情况下功能范围。

但是,如果未指定范围,则默认为最外层范围。在我们的案例窗口中。

虽然不建议这样做,并且污染了主要命名空间,这绝不是一个好主意。

答案 2 :(得分:0)

函数是一个对象,所以你可以这样做:

function foo(){
  foo.one = 1;
  foo.two = 2; 
}

foo();
console.log(foo.one, foo.two);

或者,如果您希望将这些变量放在全局命名空间中,那么:

function foo(){
  window.one = 1; // if in browser
  window.two = 2; 
}

foo();
console.log(one, two);

更新:window.用于避免strict mode中的运行时错误。

答案 3 :(得分:0)

如果为尚未声明的变量赋值,它将自动成为GLOBAL变量。

// code here can use carName

function myFunction() {
    carName = "Volvo";

    // code here can use carName

}

示例摘自:http://www.w3schools.com/js/js_scope.asp

答案 4 :(得分:0)

针对您的问题的示例javascript代码:

<script type="text/javascript"  language="javascript">
  TestFunction();

function TestFunction()
{
    testVariableOne ="Value1"; 
    testVariableSeond = 2; 
    FunctionToTestGlobalVariables(this);
};

function FunctionToTestGlobalVariables(callback)
{
   alert("FirstGlobalVariable" + callback.testVariableOne);
   alert("SecondGlobalVariable"+ callback.testVariableSeond); 

    // Or use like this since they are global now 
  //alert("FirstGlobalVariable" + testVariableOne);
  //alert("SecondGlobalVariable"+ testVariableSeond); 
}; 

</script>

从以下链接研究功能变量的范围。 参考:http://www.w3schools.com/js/js_scope.asp

var将范围限制为使用它的函数。所以不要使用var。

答案 5 :(得分:0)

使用window对象设置属性。

function foo()
{
   window.one = 1;
   window.two = 2; 
}

foo();
console.log(one, two);