如何在不声明JS中的全局变量的情况下将值从一个函数传递给另一个函数?

时间:2013-09-12 03:57:42

标签: javascript

我只想将new1和new new2函数中的值传递给new3函数

function new1(){
  var a = 5;
}

function new2(){
  var c=6;
}

function new3(){
  if(a<c){
    dosomething();
  }
}

7 个答案:

答案 0 :(得分:5)

(function(){

  var a, c; // Not global, but available to all three functions

  function new1(){
    a = 5;
  }

  function new2(){
    c = 6;
  }

  function new3(){
    if(a < c)
      doSomething();        
  }

  new1();
  new2();
  new3();

})();

function doSomething(){
  console.log("Doing something");
}

console.log(typeof a); // "undefined"

Demo

答案 1 :(得分:3)

试试这个: - http://jsfiddle.net/adiioo7/fBKub/

<强> JS: -

function new1() {
    this.a = 5;
}

function new2() {
    this.c = 6;
}


function new3() {
    var objnew1= new new1();
    var objnew2= new new2();
    if (objnew1.a < objnew2.c) {
        alert("a less than b");
    }
}

new3();

答案 2 :(得分:1)

尝试:

function new1(){

    var a = 5;
    return a;
}

function new2(){
var c=6;
    return c;
}

function new3(){
     if(new1()<new2()){
    // dosomething();
         alert("done");
       }
}

<强> DEMO FIDDLE

答案 3 :(得分:1)

看起来您想要Object oriented programmingnamespacing ...

<强> OOP:

在此方法中,您创建一个constructor,它创建一个对象来保存您的状态(特定于该对象的变量)方法来操作这些变量。

您可以拥有该对象的多个版本,每个版本都有自己的状态。

function dosomething() {
  alert("Did something!");
}

var MyNewObject = function() {
  // Accessible to functions because the functions are closures.
  var a=0; 
  var c=0;

  this.new1 = function(){
    a=5;
  }

  this.new2 = function(){
    c=6;
  }

  this.new3 = function(){
    if (a < c){
      dosomething();
    }
  }
}

var objThatDoesNews = new MyNewObject();
objThatDoesNews.new3(); // Didn't do anything
objThatDoesNews.new1(); // Set a to 5
objThatDoesNews.new2(); // Set c to 6
objThatDoesNews.new3(); // Did something!

Try it.

<强>名字空间:

在此方法中,它类似于全局变量,因为每个变量中只有一个存在。但是,由于命名空间(它只是一个简单的JS对象),您可以避免命名冲突。

function dosomething() {
  alert("Did something!");
}

var MyNamespace = {
  a: 0,
  c: 0,

  new1: function(){
    this.a=5;
  },

  new2: function(){
    this.c=6;
  },

  new3: function(){
    if(this.a < this.c){
      dosomething();
    }
  }
}

MyNamespace.new3(); // Didn't do anything
MyNamespace.new1(); // Set a to 5
MyNamespace.new2(); // Set c to 6
MyNamespace.new3(); // Did something!

Try it.

答案 4 :(得分:0)

您可以像在这里一样将值从一个函数传递给另一个函数

function func1(){
var c=6;
var a =5;
func2(c,a);
 }

function func2(obj1, obj2){
 //some operation here using obj1 and obj2
}

但是你想从不同的方法传递值,它会有两个不同的调用,被调用的函数在下一次调用之前不会保存值。

在您的情况下,a或c中的至少一个值必须为被调用函数声明为全局,并且您可以传递一个。

替代

另一个替代方案是,您可以使用返回值的函数,并且可以直接在另一个函数内调用函数。

function func1(){
 var c = 5;
  return c;
 }

function func2(){
 //use func1 here
 func1();
}

答案 5 :(得分:0)

您可以返回值,例如:

    function new1(){
      var a = 5;
      return a;
    }

    function new2(){
        var c=6;
        return c;
    }


    function new3(){
       //get values
       var x = new1(), y = new2();
       if(x < y){
           dosomething();
      }
}

答案 6 :(得分:0)

function new1(){

    var a = 5;
new2(a);
}

function new2(a){
var c=6;
new3(a, c)
}


function new3(a, c){
     if(a<c){
     dosomething();
       }

}