Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Простой вопрос (https://javascript.ru/forum/misc/25609-prostojj-vopros.html)

yuri.gordeev 10.02.2012 13:12

Простой вопрос
 
Всем привет,
простейший вроде бы пример, вопрос почему вываливается ошибка
Uncaught TypeError: Property 'foo' of object [object DOMWindow] is not a function

var foo=100;

function foo(){
    alert('Hello,world!');
};
    
foo();



Ссылка на песочницу: http://learn.javascript.ru/play/etPJS


Спасибо, всем, заранее :)

Pavel M. 10.02.2012 13:22

поставьте перед вызовом foo() строку
alert(typeof foo)

Kolyaj 10.02.2012 13:27

А зачем вы и функцию и переменную одним именем назвали?

yuri.gordeev 10.02.2012 13:51

Pavel M.,
typeof(foo)
говорит Number

Kolyaj,
интересно просто с точки зрения JavaScript почему так получается
если сделать
var foo=1;
var foo=function(){};


то всё ок.

GuardCat 10.02.2012 14:05

Цитата:

Сообщение от yuri.gordeev
var foo=function(){};

И
function foo() {}

Две большие разницы. В первом случае, значение переменной присваивается, когда выполнение доходит до этой строки. Во втором случае, функция, в каком бы месте она не находилась в рамках контекста, создаётся сразу при входе в контекст.

В вашем случае, создаётся вначале функция, а затем значение переменной заменяется на другое. Всё верно.

yuri.gordeev 10.02.2012 14:31

Спасибо, теперь всё встало на свои места :)


Часовой пояс GMT +3, время: 11:10.