Почему функции пишутся без скобок в ReactJS?

Ошибка сегментации связана с ограничением памяти стека при использовании OpenMP. Использование решений из предыдущего ответа не решило проблему для меня в ОС Windows. Использование памяти в куче, а не в стеке, похоже, работает:

integer, parameter :: nmax = 202000  
real(dp), dimension(:), allocatable :: e_in
integer i

allocate(e_in(nmax))

e_in = 0

! rest of code

deallocate(e_in)

Плюс это не связано с изменением каких-либо параметров среды по умолчанию.

Подтверждение и обращение к решению ohm314 здесь: большой массив с использованием распределения памяти кучи

1
задан ranieribt 11 March 2019 в 15:43
поделиться

3 ответа

В JavaScript функция - это объект, очень похожий на другие объекты.

Вы можете назначить функцию переменной.

let foo = function () {
  return "bar"
}

И позже вы можете добавить скобки к этому имени переменной для вызова функции.

foo() // Returns "bar".

Вы можете передавать переменную, как и любую другую переменную, например, в качестве параметра другой функции.

function baz (some_function) {
  return some_function()
}

baz(foo) // Returns "bar".

Это то, что происходит в вашем примере. this.name передается в функцию, которая обрабатывает событие onChange, и в какой-то момент внутри этой функции он добавляет скобки для оценки переданной вами функции.

Вот почему, если вы добавляете круглые скобки при передаче функции, функция оценивается, и результат передается:

baz(foo()) // Uncaught TypeError: some_function is not a function

Здесь, foo() уже вычислено, и переменная some_function в baz содержит строку "bar" вместо функции.

0
ответ дан Holistic IT 11 March 2019 в 15:43
поделиться

Функция «без фигурных скобок» является указателем на некоторую функцию.

Вот пример.

let bananas = function(){ console.log('bananas') }

Когда вы делаете это, вы не вызываете функцию, а только ссылаетесь на нее, только создаете указатель на функцию. С этой ссылкой вы можете звонить bananas() в любое время, а не только когда код читается.

Причина, по которой вы передаете только ссылку на функцию в реакции, заключается в том, что внутри компонента, где он будет вызывать функцию.

Если вы просто сделаете это <input type="text" onChange={this.name()} />, во время рендеринга ввода вызывается name(), но если вы передаете только ссылку на функцию, реакция будет вызывать функцию только тогда, когда событие (onChange) случается.

0
ответ дан Vencovsky 11 March 2019 в 15:43
поделиться

В JavaScript функции являются значениями. Это означает, что его можно использовать в любом контексте выражения, например, передавать значения в функции или возвращать из функций. Значение функции - это ее собственное имя. Не следует путать с возвращаемым значением функции .

Круглые скобки - это оператор JavaScript, используемый для создания выражений вызова функции , между другими вариантами использования.

В вашем случае вы передаете значение this.name для свойства onChange элемента React input. onChange ожидает, что function value будет вызван в ответ на событие изменения . Таким образом, сам React будет вызывать функцию, используя для этого в этом контексте оператор круглых скобок.

Если в противном случае вы написали this.name(), вы уже выполняете вызов функции, что приведет к ошибке, так как вы игнорируете ожидаемое поведение React.

0
ответ дан ranieribt 11 March 2019 в 15:43
поделиться
Другие вопросы по тегам:

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