как использовать функцию (1) (2) в JavaScript? и как это работает?

Очень примерно и из памяти так как у меня нет кода этого ноутбука:

using (OleDBConnection conn = new OleDbConnection())
{
  conn.ConnectionString = "Whatever connection string";

  using (OleDbCommand cmd = new OleDbCommand())
  {
    cmd.Connection = conn;
    cmd.CommandText = "Select * from CoolTable";

    using (OleDbDataReader dr = cmd.ExecuteReader())
    {
      while (dr.Read())
      {
        // do something like Console.WriteLine(dr["column name"] as String);
      }
    }
  }
}
6
задан user216056 21 November 2009 в 12:07
поделиться

4 ответа

В этом случае вы предполагаете, что функция (1) возвращает функцию, а не вызываете эту новую анонимную функцию с аргументом 2.

См. Этот пример:

function sum(a) {
    return function(b) {
        return a+b;
    }
}

// Usage:
window.alert(sum(5)(3));         // shows 8

var add2 = sum(2);
window.alert(add2(5));           // shows 7
window.alert(typeof(add2));      // shows 'function'

Здесь мы создаем функцию sum , которая принимает один аргумент. Внутри функции sum мы создаем анонимную функцию , которая принимает другой аргумент. Эта анонимная функция возвращается в результате выполнения sum .

Обратите внимание, что эта анонимная функция является прекрасным примером того, что мы называем закрытием . Замыкание - это функция, которая сохраняет контекст, в котором она была создана. В этом случае он сохранит внутри себя значение переменной a , как и функция примера add2 . Если мы создадим много замыканий, они будут независимыми, как вы можете видеть:

var add3 = sum(3);
var add4 = sum(4);

window.alert(add3(3)); // shows 6
window.alert(add4(3)); // shows 7

Кроме того, они не «запутаются», если у вас есть локальные переменные с одинаковыми именами:

var a = "Hello, world";

function multiply(a) {
    return function(b) {
        return a * b;
    }
}

window.alert(multiply(6)(7)); // shows 42

var twoTimes = multiply(2);
window.alert(typeof(twoTimes));
window.alert(twoTimes(5));

Итак, после вызова sum (2) или multiply (2) результат не будет число или строка, а функция . Это характеристика функциональных языков - языков, в которых функции могут передаваться как параметры и возвращаться как результаты других функций.

11
ответ дан 8 December 2019 в 13:46
поделиться

У вас есть функция, которая возвращает функцию:

function f(n) {
  return function(x) {
    return n + x;
  };
}

Когда вы вызываете f (1), вы получаете обратную ссылку на функцию. Вы можете сохранить ссылку в переменной и вызвать ее:

var fx = f(1);
var result = fx(2);

Или вы можете вызвать ее напрямую:

var result = f(1)(2);

Чтобы получить функцию, которая возвращает функцию, которая возвращает функцию, которая возвращает функцию, вам просто нужно повторить процесс :

function f(n) {
  return function(x) {
    return function(y) {
      return function(z) {
        return n + x + y + z;
      }
    }
  };
}
4
ответ дан 8 December 2019 в 13:46
поделиться

Если ваша функция возвращает функцию, вы также можете вызвать ее.

x = f(1)(2)

эквивалентно:

f2 = f(1)
x = f2(2)
1
ответ дан 8 December 2019 в 13:46
поделиться

Круглые скобки указывают на вызов функции (вы это «называете»). Если у вас есть

<anything>()

, это означает, что значение something является вызываемым значением. Представьте себе следующую функцию:

function add(n1) {
    return function add_second(n2) { 
        return n1+n2
    }
}

Затем вы можете вызвать ее как add (1) (2) , что будет равняться 3. Естественно, вы можете расширить эту функцию, сколько захотите.

1
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: