仅传递javascript中的第二个参数

时间:2018-05-28 15:11:22

标签: javascript function arguments

我目前尝试创建一个函数,我只传递函数的第二个参数。我已经阅读了一些文档,但没有任何东西向我探讨。

我会这样做:

 function test (a,b){ ....};
    // pass only the second parameter 
    test( ... , b) ;

我目前的想法是将第二个参数作为事实上的动态默认参数传递如下:

    var defaultVar = "something" ;

    function test (a,b = defaultVar){...}

然后根据我的需要更改defaultVar值。

var defaultVar = modification ; 

事实上,我正在使用Google驱动器API,我尝试在第二个参数中输入一个字符串值来进行回调。此回调将负责验证返回文件是否实际上是搜索文件(通过对名称值进行布尔验证)。

因此,我的想法是通过传递他的名字并以这种方式检索文件数据来自动化在Google驱动器上获取文件的过程。

我希望我的精确度会有用。

这里是我的quickstart.js:

(...Google authentication and all) ; 

 var filename = "";
// enter a filename in the function by the way of filename
function listFiles (auth, filename =  filename) {
  const drive = google.drive({version: 'v3', auth});
  drive.files.list({
    pageSize: 50,
    fields: 'nextPageToken, files(id, name)',
  }, (err, {data}) => {
    if (err) return console.log('The API returned an error: ' + err);
    const files = data.files;
    if (files.length) {
      console.log('Files:');
      files.map((file) => {
        console.log(`${file.name} (${file.id})`);

            // check if the file returns match the filename wished 
            displayFile(file);
              if(`${file.name}` == filename ){
                console.log("name found !")
                      const fileData = { name : `${file.name}`,
                                         id : `${file.id}`
                      }
         return fileData
        }

      });
    } else {
      console.log('No files found.');
    }
  });
}

listFiles(undefined, "test.md")

任何改进的想法显然都是受欢迎的,

由于

2 个答案:

答案 0 :(得分:5)

在ES2015中添加了默认参数值,您可以声明参数的默认值,并且在进行调用时,如果您将undefined作为第一个参数传递,它将获得默认值:

function test(a = "ay", b = "bee") {
  console.log(`a = ${a}, b = ${b}`);
}
test();             // "a = ay, b = bee"
test(1);            // "a = 1, b = bee"
test(undefined, 2); // "a = ay, b = 2"
test(1, 2);         // "a = 1, b = 2"

您可以通过测试undefined在ES2015之前的环境中手动执行类似操作:

function test(a, b) {
  if (a === undefined) {
    a = "ay";
  }
  if (b === undefined) {
    b = "bee";
  }
  console.log("a = " + a + ", b = " + b);
}
test();             // "a = ay, b = bee"
test(1);            // "a = 1, b = bee"
test(undefined, 2); // "a = ay, b = 2"
test(1, 2);         // "a = 1, b = 2"

答案 1 :(得分:1)

如果可以更改函数采用的参数数量,可以通过对象属性传递参数。然后,您可以让调用者决定在调用过程中要指定的一个或多个属性。

在函数的参数规范中,其他属性可以通过对象分解来获取默认值:

function test({a = 1, b = 2}) {
    console.log(`a = ${a}, b = ${b}`);
};

test({b:42}); // only specify what b is