Мне интересно, есть ли какие-либо ограничения на то, какие типы значений могут быть установлены с помощью const
JavaScript - в частности, функции. Это действительно? Конечно, это работает, но считается ли это плохой практикой по какой-либо причине?
const doSomething = () => {
...
}
Должны ли все функции быть определены таким образом в ES6? Не похоже, что это завоевало популярность, если так.
Спасибо за любые комментарии!
javascript
function
const
ecmascript-6
Дэвид Синклер
источник
источник
var doSomething = <function def>;
. 4) «Должны ли все функции быть определены таким образом в ES6?» Мне кажется обременительным. Мне нравятся объявления функций. Каждому свое.const
. Вы хотите предотвратить переопределение функции? Я предполагаю, что вы знаете свой код, чтобы не делать этого в любом случае. Вы хотите выразить намерениеdoSomething
, то есть, что оно содержит функцию и не меняет ее значение? Я думаю, что объявления функций также ясно выражают эту цель. Итак, если вам нужна «защита во время выполнения» от переопределения, сделайте это. В противном случае я не вижу большой пользы. Конечно, если бы вы прежде использовалиvar foo = function() {};
, я бы использовалconst
вместоvar
.const
вообще.Ответы:
Нет проблем с тем, что вы сделали, но вы должны помнить разницу между объявлениями функций и выражениями функций.
Объявление функции, то есть:
Поднимается полностью до верхней части прицела (и тому подобное,
let
иconst
они также имеют объемную область).Это означает, что будет работать следующее:
Функциональное выражение, то есть:
Это создание анонимной функции (
function () {}
) и создание переменной, а затем присвоение этой анонимной функции этой переменной.Таким образом, обычные правила, связанные с подъемом переменных в области видимости - переменные в области блока (
let
иconst
) не поднимаютсяundefined
до вершины их области видимости блока.Это означает:
Сбой, так
doSomething
как не определено. (Это броситReferenceError
)Если вы переключитесь на использование,
var
вы получите подъем переменной, но она будет инициализированаundefined
так, что приведенный выше блок кода все равно не будет работать. (Это вызовет,TypeError
посколькуdoSomething
не является функцией во время вызова)Что касается стандартных методов, вы всегда должны использовать соответствующий инструмент для работы.
Аксель Раушмайер (Axel Rauschmayer) имеет большой пост о сфере применения и подъеме, включая семантику es6: переменные и область видимости в ES6
источник
function a(){console.log(this);}
и bconst a=_=>{console.log(this);}
состоит в том, что если вы назовете его такa.call(someVar);
, как в a , он напечатаетsomeVar
, в b , он напечатаетwindow
.Хотя использование
const
для определения функций кажется хаком, но оно дает некоторые большие преимущества, которые делают его превосходным (на мой взгляд)Это делает функцию неизменной, поэтому вам не нужно беспокоиться об изменении этой функции каким-либо другим фрагментом кода.
Вы можете использовать синтаксис жирной стрелки, который короче и чище.
Использование функций стрелок позаботится о
this
связывании для вас.пример с
function
тот же пример с
const
источник
function f(x, y) {
18 символов,const f = (x, y) => {
21 символ, поэтому на 3 символа больше. 3. Сохранение этой привязки имеет значение, только если функции определены внутри метода (или другой функции, которая имеет значение this). На верхнем уровне сценария это бессмысленно. Я не говорю, что вы не правы, просто причины, о которых вы упомянули, не очень актуальны.Прошло три года с тех пор, как был задан этот вопрос, но я только сейчас сталкиваюсь с ним. Поскольку этот ответ находится далеко внизу, пожалуйста, позвольте мне повторить его:
Я был мотивирован, чтобы провести некоторое исследование после наблюдения одного плодовитого кодировщика JavaScript, который всегда использует
const
оператор forfunctions
, даже когда нет явной причины / выгоды.В ответ на вопрос « считается ли это плохой практикой по какой-либо причине? », Позвольте мне сказать, ИМО, да, или, по крайней мере, есть преимущества в использовании
function
утверждений.Мне кажется, что это во многом вопрос предпочтений и стиля. Есть несколько хороших аргументов, представленных выше, но ни один из них не настолько ясен, как это делается в этой статье:
Постоянная путаница: почему я все еще использую операторы JavaScript, написанные medium.freecodecamp.org/Bill Sourour, гуру JavaScript, консультантом и учителем.
Я призываю всех прочитать эту статью, даже если вы уже приняли решение.
Вот основные моменты:
источник
defaultErrorHandler
const, назначенные как анонимные функции, которые я затем могу вызывать из обработчиков обещаний. Это позволило бы мне по желанию «переопределить» этот обработчик ошибок по умолчанию внутри функций, как мне было нужно. Некоторым просто нужно вернуть объект ошибки, а другим - HTTP-ответ, с разной степенью детализации. Тем не менее, структура кода может быть знакомой моделью независимо..then( res.success, res.error )
намного больше, чем анонимные функции, которые я объявил, просто вызываетres.success(value);
. Имея.then( ..., defaultErrorHandler)
общий шаблон может быть приятно, с уровнем верхнего определенной функцией defaultErrorHandler, и необязательно иметьconst defaultErrorHandler = error => { ... }
объявлено в пределах области видимости функции по желанию.Есть некоторые очень важные преимущества в использовании,
const
и некоторые сказали бы, что его следует использовать везде, где это возможно, из-за того, насколько оно преднамеренное и показательное.Насколько я могу судить, это наиболее показательное и предсказуемое объявление переменных в JavaScript и одно из самых полезных, ПОСКОЛЬКУ от того, насколько оно ограничено. Зачем? Потому что это исключает некоторые возможности
var
иlet
объявления.Что вы можете сделать, когда читаете
const
? Вы знаете все следующее, просто прочитавconst
оператор объявления И не просмотрев другие ссылки на эту переменную:Следующая цитата взята из статьи, в которой говорится о преимуществах
let
иconst
. Он также более прямо отвечает на ваш вопрос об ограничениях / ограничениях ключевого слова:Источник: https://ponyfoo.com/articles/var-let-const
источник