Я пытаюсь сделать снимок с локальной камеры ноутбука с помощью этого кода:
function takePhoto(img)
{
const img = img || document.querySelector('img');
imageCapture.takePhoto()
.then(blob => {
let url = window.URL.createObjectURL(blob);
img.src = url;
window.URL.revokeObjectURL(url);
})
.catch(error);
};
takePhoto();
но получая следующую ошибку:
SyntaxError: Identifier 'img' has already been declared
Я проверил, в приведенном выше коде нет объявления img
(также пытался переименовать его во что-то вроде image_local
, бесполезно). Любые идеи, как это исправить, приветствуются. Спасибо.
function takePhoto(img)
<- первое объявление img
; const img
<- второе объявление img
.
Вы не можете объявить константу с тем же именем, что и у существующей переменной. В этом случае img в параметрах вашей функции. Назовите одно из двух как-нибудь по-другому.
Изменять:
const img = img || document.querySelector('img');
к:
img = img || document.querySelector('img');
Объяснение:
Ваше определение функции включает параметр img
function takePhoto(img)
Это фактически объявляет переменную с именем img
для использования внутри функции с любым значением, которое было передано во время вызова функции. Затем вы пытаетесь повторно объявить переменную img
как константу внутри функции:
const img ...
Вы не можете этого сделать, как указано в полученном вами SyntaxError.
@T.J.Crowder Согласен. Я обновил ответ, включив в него краткое объяснение. Спасибо за толчок к адекватному ответу.
В вопросе, который вы упомянули
"there is no any declaration of img in the code above"
... на самом деле есть два объявления (согласно сообщению об ошибке):
1)
function takePhoto(img)
Это эффективно объявляет переменную, потому что помещает ее в область действия функции с таким именем.
2)
const img
Здесь вы пытаетесь снова объявить ту же переменную.
У вас может быть не более одного объявления одной и той же переменной. изменение
const img = img || document.querySelector('img');
к
img = img || document.querySelector('img');`
исправит это, поскольку он больше не пытается повторно объявить переменную, теперь он просто (потенциально) меняет ее значение.
Имя параметра
img
по сути является объявлением. Также обратите внимание, что вызов функции в конце опубликованного кода в любом случае не передает аргумент.