Функція передачі Javascript

У мене є наступна проблема. Мені потрібно передавати функцію hello, щоб назвати їх, і пізніше їх називають. Але я отримую помилку, привіт не є функцією.

<html>
    <head>
        <title>D</title>
        <script type="text/javascript">
            hello = function(){
                alert("hello! I'm called") ;
            }
        </script>
    </head>

    <body>
        <script type="text/javascript">
            name = function( hello ) {
                hello() ;
            }
            name();
        </script>
    </body>
</html>
0
@Alexandr Ops! Моя помилка. Але в даному випадку Firefox працює нормально, а хром - ні.
додано Автор Dewsworld, джерело
ви приховуєте функцію hello з аргументом "hello", який використовується у визначенні функції імені. коли ви викликаєте ім'я (), ви не передаєте функцію. ім'я виклику як ім'я (привіт); також не приховуйте імена gloval, як це
додано Автор Alexandr, джерело

5 Відповіді

Ви визначаєте параметр під назвою hello у name() , але ви називаєте name() без параметрів, таким чином hello не визначено в контексті назви name() . Або передайте параметр під час виклику name() або повністю видаліть параметр:

name = function (hello) {
    hello();
}
name(hello);

або

name = function() {
    hello();
}
name();
6
додано
@Consciousness Насправді у мене складна проблема в реальному, я зробив це легко тут :) Дякуємо за рішення
додано Автор Dewsworld, джерело
Ви не можете просто зробити ... function() {hello (); }
додано Автор user938787, джерело

Всередині name , hello посилається на параметр hello . Оскільки ви викликаєте функцію, не передаючи жодного аргументу, hello є undefined .

Або передайте функцію як аргумент

name(hello);

або опустіть специфікацію параметра, щоб hello посилався на глобальну змінну:

name = function() {
    hello();
};

Слід уникати глобальних змінних, щоб вони не стикалися з властивостями вікна або інших бібліотек. Ви можете використовувати об'єкт як простір імен:

var myNameSpace = {};
myNameSpace.hello = function...
myNameSpace.name = function...
5
додано

Існує дві проблеми з вашим кодом.

  1. Ви не можете оголосити ім'я змінна , яке вже існує в класі Window .
  2. Функція містить параметр, названий функцією hello . Для цього вам необхідно пройти делегат функції, щоб досягти цього.

Подивіться повний код нижче:

<html>
    <head>
        <title>D</title>
        <script type="text/javascript">
            var hello = function(){
                alert("hello! I'm called") ;
            }
        </script>
    </head>

    <body>
        <script type="text/javascript">
            var nameFunc = function( helloDelegate ) {
                helloDelegate() ;
            }
            nameFunc(hello);
        </script>
    </body>
</html>
2
додано

Dewsworld, просто навчитися налагоджувати JavaScript. Це допоможе вам дослідити проблему та знайти рішення самостійно. У деяких браузерах вбудовані налагоджувачі, в інших потрібно завантажити. Але це не має значення.

Як тільки ви почнете виконувати сценарії крок за кроком, ви побачите всі його змінні поточного стану, і це буде більш чітким і ефективним для вашого, ніж давати причину проблеми, яку ви зустріли.

Також прочитайте останнє видання JavaScript The Definitive Guide. Принаймні намагайтеся знайти рішення і причину цього в книзі. Тому що тут ви отримуєте лише короткий розв'язок, як правило, без глибокого розпізнавання, як працює движок JavaScript.

1
додано

Я б повністю змінив це на це:

function hello(){
    alert("hello! I'm called");
}

function name(hello) {
    hello() ;
}

name(hello);

Немає необхідності призначати функції змінним, як ви робите.

Як і інші, головна проблема полягала в тому, що ви нічого не передавали в функцію назви.

1
додано
@MunimAbdul Спробуйте виконати цей код, не передаючи його. Він не викликає функцію hello.
додано Автор Richard Dalton, джерело
Передача параметра hello є марною в функції name . Незалежно від того, що ви надаєте, JS-движок буде шукати функції спочатку, ніж параметри і оцінювати.
додано Автор Abdul Munim, джерело
Ви праві, моя погана!
додано Автор Abdul Munim, джерело
ІТ КПІ - JavaScript
ІТ КПІ - JavaScript
504 учасників

співтовариство javascript розробників в Telegram