【问题标题】:Efficient Javascript Code: better to pass variables as arguments in a function, or to replicate the variables?高效的 Javascript 代码:最好将变量作为参数传递给函数,还是复制变量?
【发布时间】:2020-09-04 14:54:39
【问题描述】:

我想在函数 A 之后运行函数 B,但在运行时使用函数 A 中的一些变量。假设为了这个练习,我不想声明全局变量。

在两个函数中编写这些变量会是“更好”的代码(场景 A),还是在函数 A 中包含局部变量并将它们作为参数传递给函数 B(场景B)?

以下是这两种情况的表示:

场景 A

function A() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var cell = sheet.getCurrentCell();

    cell.setValue("Hello World");

}

function B(cell) {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var cell = sheet.getCurrentCell();
    var txt = "New Text";

    cell.setValue(txt);
}

场景 B

function A() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getActiveSheet();
    var cell = sheet.getCurrentCell();
    cell.setValue("Hello World");

    B(cell);
}

function B(cell) {
    var txt = "New Text";
    cell.setValue(txt);
}

在我最近从事的一个项目中,我有几十个变量,场景 B 对我来说似乎“更干净”,但我真的不知道我是否应该这样做。

我知道这是基本的,但我对 JavaScript 编码还是很陌生,我无法理解这一点。任何帮助将不胜感激!

上面的代码在 Google Apps 脚本中。

谢谢你:)

【问题讨论】:

  • 场景 A 和 B 不是同一个场景。根据场景 B 的本质,一种方法依赖于另一种方法。在第一种情况下,它们都是独立的。因此,我认为,在比较不同的情况时,很难对什么是“更好”做出笼统的陈述。

标签: javascript variables google-apps-script parameter-passing


【解决方案1】:

A 和 B 不是同一个函数。 B 是parameterized function。所以,逻辑应该是,如果我们已经有了单元格值,则调用 B,如果我们没有单元格,则调用 A。

现在,对于您的问题,是的,option B is more appealable 因为它可以让您避免代码重复。但我看不出在这种情况下从 A 调用 B 的目的。

In my opinion,如果你写一个单独的函数来获取单元格会更好,代码遵守one function one purpose(SRP)

下面是工作的sn-p:

 //a function that return default cell value if called
 function GetCell(){
    let ss = SpreadsheetApp.getActiveSpreadsheet();
    let sheet = ss.getActiveSheet();
    return sheet.getCurrentCell();    
  }

 function A() {
    let cell=GetCell(); //get cell value by calling function
    cell.setValue("Hello World");
 } 


//function B execute successfully with parameter or without parameter. 
 function B(cell) {

   if(typeof cell == "undefined") {
    cell=GetCell();
   }
   let txt = "New Text";
   cell.setValue(txt);
 }

【讨论】:

  • 这是有道理的。我的真实场景是我正在运行一个函数(A),它可以采用两个方向(取决于 if/else 语句):第一个它将运行函数 B,第二个函数 C。所有三个函数都使用相同的变量(电子表格 ID、当前单元格等),因为它们基于相同的电子表格,因此我想知道哪个程序更好。但我喜欢“一个功能一个目的”的想法。谢谢!
【解决方案2】:

这个怎么样:

function A() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = sheet.getCurrentCell();
  cell.setValue("Hello World");
  return cell;
}

function B(cell) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var cell = sheet.getCurrentCell();
  var txt = "New Text";
  cell.setValue(txt);
}

function runMe() {
 B(A);
}

【讨论】:

  • 你能用 Javascript 做到这一点吗?用另一个函数作为参数调用一个函数?我什至不知道我会尝试,谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2019-07-22
  • 1970-01-01
相关资源
最近更新 更多