2015-01-07 3 views
0

EDIT Я хочу, чтобы функция будет доступна во всем миреJQuery область видимости функции путаница

Почему myfunction0 работа в йоте готового вызова и myfunction1 не работает?

external.js файл

(function($) { 

    // functions defined like that works 
    myfunction0 = function() { 
     console.log("hello world"); 
    } 

    // functions defined like that do not work 
    function myfunction1() { 
     console.log("hello world"); 
    } 

    })(jQuery); 

index.html

<script> 
$(function() { 
    myfunction0(); // works 
    myfunction1(); // does not work not defined 
}) 
</script> 

Получает ли первое определение функции глобального охвата в то время как второй только локальный 'в файле' объеме?

+2

Потому что 'myfunction0' является глобальным. – undefined

+0

как нет ключевого слова 'var' перед – Hacketo

+0

Не объявляйте неявно переменные, всегда используйте ключевое слово 'var'. –

ответ

1
function myfunction1() { } 

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

myfunction0 = function() { } 

объявляет переменную (которая является функцией).

Поскольку нет var прилагается, эта переменная получает глобальный охват.

1

Вы не объявили myfunction0, используя ключевое слово var, поэтому оно было объявлено в глобальном масштабе. function объявления привязаны к сфере, в которой они объявлены.

Если добавить var ключевое слово в myfunction0 (как следует), вы увидите, что ни одна функция будет доступна:

var myfunction0 = function() { 
    console.log("hello world"); 
} 

Example fiddle

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