2017-01-12 4 views
-2

Я смущен, почему foo2 работает, но foo1 нет.Проблема с объявлением функции Javascript

JS Fiddle: https://jsfiddle.net/474v3mfd/4/

HTML

<a onclick="foo1()"> 
    foo1 
</a> 
<a onclick="foo2()"> 
    foo2 
</a> 

Javascript

function foo1(){ 
    console.log("foo1 called.."); 
} 

foo2 = function(){ 
    console.log("foo2 called.."); 
} 

журнала консоли

(index):60 Uncaught ReferenceError: foo1 is not defined at HTMLAnchorElement.onclick ((index):60) onclick @ (index):60 (index):50 foo2 called..

Резюме

Эта проблема касается JSFiddle. Когда я помещаю код в файл HTML, он отлично работает.

+1

Вам нужно будет показать более полный пример, но я предполагаю, что код внутри функции (например, onload event), поэтому 'foo1' является локальным, а' foo2' является глобальным. – JJJ

+0

** Сначала: ** убедитесь, что ваш скрипт загружен перед тегами 'a'. Хотя его не посоветовали. Вы должны использовать '.addEventListener' для привязки события. ** Второе: ** объявление переменной без 'var' сделает ее глобальной. – Rajesh

+0

Добавлен JS Fiddle. https://jsfiddle.net/474v3mfd/4/ –

ответ

0

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

но здесь, в скрипте, это не работает, поскольку выражение функции назначено глобальной переменной «foo2», поэтому оно доступно, но функция foo1 недоступна в области действия скрипта.

Если вы сделаете так, как описано ниже, создав переменную foo2 с помощью var, она получит создание в другую область (не более глобальную), и именно поэтому она будет генерировать ту же ошибку, что и foo1.

var foo2 = function(){ 
    console.log("foo2 called.."); 
} 

обновлена ​​скрипку - https://jsfiddle.net/474v3mfd/6/

надеюсь, что это помогает.

Смежные вопросы