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, көзі
Сәлемдесу функциясын атау функциясының анықтамасында қолданылатын «сәлем» дәлелімен жасырады. name() атын шақырғанда, функцияны алмайсыз. қоңырау атауын аты (сәлем); ақ бұл сияқты гловальды есімдерді жасырмаңыз
қосылды автор Alexandr, көзі

5 жауаптар

name() ішіндегі hello деп аталатын параметрді анықтайсыз, бірақ сіз name() /code> 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();
};

window сипаттарымен немесе басқа кітапханалармен соқтығыспау үшін жаһандық айнымалылардан аулақ болу керек. Нысанды аттар кеңістігі ретінде пайдалануға болады:

var myNameSpace = {};
myNameSpace.hello = function...
myNameSpace.name = function...
5
қосылды

Сіздің кодыңызда екі мәселе бар.

  1. Window класында бұрыннан бар айнымалы атауын жариялай алмайсыз.
  2. Сіздің function атыңыз 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 параметрін өткізу name функциясында пайдасыз. Сіз қамтамасыз етесіздер, JS қозғалтқышы функцияларды біріншіден параметрлерді қарап, бағалауға мүмкіндік береді.
қосылды автор Abdul Munim, көзі
сен дұрыс, менің жаманмын!
қосылды автор Abdul Munim, көзі