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関数を非表示にします。 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,

helloname の中でパラメータ hello を参照します。引数を渡さずに関数を呼び出すと、 helloundefined です。

関数を引数として渡すか

name(hello);

または hello がグローバル変数を参照するようにパラメータ指定を省略します。

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

グローバル変数は、 window のプロパティや他のライブラリと衝突しないようにする必要があります。オブジェクトを名前空間として使用することができます:

var myNameSpace = {};
myNameSpace.hello = function...
myNameSpace.name = function...
5
追加された

あなたのコードには2つの問題があります。

  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 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 - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript