在JavaScript上的函数之间传递变量

时间:2018-12-19 22:45:19

标签: javascript

我正在尝试跨函数传递变量,

function one() {
  var x = 1
}

function two() {
  var y = x + 1;
}

alert(y);

有办法吗?

edit:感谢大家的帮助,但是也许我应该更具体地回答我的问题。

5 个答案:

答案 0 :(得分:0)

您将需要通过将变量声明提取到函数外部来提升作用域。也就是说,在功能之外定义xy。请注意,您仍然可以通过函数中的来更新其。但是,不要忘记,您实际上还需要同时调用这两个函数!

这可以在下面看到:

var x, y;

function one() {
   x = 1;
}

function two() {
  y = x + 1;
}

one();
two();
console.log(y);

答案 1 :(得分:0)

如果您真的想用一种方法声明变量,请返回它

  function one(){
        var x = 1;
        return x;
    }
    
    function two() {
      var x = one();
      var y = x + 1;
      return y;
    }
alert(two());

答案 2 :(得分:0)

您当前的方式在函数范围内具有x和y,这意味着另一个函数不知道它的存在。同样,根据功能命名功能也是一种很好的做法。 3种直接的方法。

  1. 全球
  2. Params
  3. 内联

  1. 在任何功能都可以达到的功能范围之外设置两个变量。

var x, y;

function assignOne() {
   x = 1;
}

function addOne() {
  y = x + 1;
}

assignOne();
addOne();
console.log(y);

  1. 将参数传递给函数并返回值。

function one() {
   return 1;
}

function addOneTo(x) {
  return x + 1;
}

const y = addOneTo(one());
console.log(y);

  1. 内联执行功能

var x = null;

function one() {
   x = 1;
}

function two() {
  return x + 1;
}

one();
const y = two();
console.log(y);

答案 3 :(得分:0)

好像您想在两个函数之间具有共享状态,而不是传递参数。因此,面向对象的模式似乎是合适的。

class Thing {
  constructor() {
    this.x = 1;
  }
  one() {
    return this.x;
  }
  two() {
    return this.x + 1;
  }
}

const t = new Thing();
console.log(t.one());
console.log(t.two());

答案 4 :(得分:0)

如果要在函数之间共享变量,但又不想在全局范围内声明它们,则可以使用如下所示的闭包:

(function() {
  var x, y;

  function one() {
    var x = 1
  }

  function two() {
    var y = x + 1;
  }
  one();
  two();
  alert(y);
})();