hello = function(){ alert("hello! } "> hello = function(){ alert("hello! } "> hello = function(){ alert("hello! } " />

Javascript функцыя праходжання

У мяне наступная праблема. Мне трэба перадаць функцыю прывітанне назваць і іх пасля называць. Але я атрымліваю памылку, прывітанне не з'яўляецца функцыяй.

<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, крыніца
схаваць функцыю прывітання з аргументам «прывітанне», які выкарыстоўваецца ў вызначэнні функцыі імя. пры выкліку імя (), вы не перадаяце функцыі. назваць імя, як імя (прывітанне); і не хаваюць gloval імёнаў, як гэта
дададзена аўтар Alexandr, крыніца

5 адказы

Вы вызначаеце параметр з імем прывітанне у назва() , але вы выклікаеце назва() без параметраў, такім чынам, прывітанне не вызначаны ў кантэксце назва() . Альбо перадаць параметр пры выкліку назва() або цалкам выдаліць параметр:

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

або

name = function() {
    hello();
}
name();
6
дададзена
@Consciousness На самай справе ў мяне ёсць складаная праблема ў рэальным, я зрабіў гэта лёгка тут :) Дзякуй за рашэнне
дададзена аўтар Dewsworld, крыніца
Хіба вы не можаце проста зрабіць ... функцыя() {прывітанне (); }
дададзена аўтар user938787, крыніца

Ўнутры назва , прывітанне будзе спасылацца на параметр Hello . Як вы выклікаеце функцыю без праходжання якіх-небудзь аргументаў, Hello гэта не вызначана .

Альбо перадаць гэтую функцыю ў якасці аргументу

name(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 Поўнае кіраўніцтва, апошняе выданне. Прынамсі, паспрабаваць знайсці рашэнне і прычыну гэтага ў кнізе. Таму што тут вы атрымаеце толькі кароткі рашэнне, як правіла, без глыбокіх дапёр, як працуе рухавік JavaScript.

1
дададзена

Я хацеў бы змяніць яго цалкам да гэтага:

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

function name(hello) {
    hello() ;
}

name(hello);

Няма неабходнасці прызначаць функцыі пераменным, як вы робіце.

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

1
дададзена
@MunimAbdul Паспрабуйце запусціць гэты код без праходжання ў параметры. Гэта не выклік функцыі прывітання.
дададзена аўтар Richard Dalton, крыніца
Перадача параметру Hello бескарысны ў назва функцыі. Незалежна ад таго, што вы падасце, JS рухавік будзе шукаць функцыі першага, чым параметры і ацаніць.
дададзена аўтар Abdul Munim, крыніца
вы маеце рацыю, мой дрэнны!
дададзена аўтар Abdul Munim, крыніца