3

thisFunc;したがって、以前の質問では、の代わりにのような関数を呼び出す/実行する/開始するように言われましたthisFunc();

そして、それがうまくいくこともあれば、うまくいかないこともあることがわかりました。

<script type='text/javascript'>
var valgo = 0;
var thing = "";
var lastPost = document.getElementById(<? echo $_SESSION['countything']; ?>); 
lastPost.style.opacity = valgo;

function valgogoer(thing){
valgo += .05;
if (lastPost.style.opacity < 1){
lastPost.style.opacity = valgo;
}
}


setInterval(function(){valgogoer(<? echo $_SESSION['countything']; ?>)}, 50);

// Somethings are leftover from when I was messing with it, like the parameter thing.
</script>

このコードでは(ひどい場合は教えてください)、setIntervalを使用してパラメーターを使用して関数を呼び出すため、調査の結果、上記のように呼び出す必要があることがわかりました。

だから2つの質問

  1. 関数の呼び出しで実際に()を使用するのはいつですか?

  2. 上記のコードでは、不透明度が1に達した後、その関数の実行を停止するようにするにはどうすればよいですか。現在は1に制限されていますが、まだ呼び出されており、関数の呼び出しを停止した方がよいと感じています。 、呼び出されるが何もしないよりも。

ありがとう!

4

3 に答える 3

4

関数を呼び出すときは角かっこを使用します。ただし、関数の内容を渡したいだけの場合は、渡しません。例:

var a = function(){
    return "I'm a function";
}
var b = a;//Equals to function(){return "I'm a function";}
var c = a();//Equals to "I'm a function"

イベントハンドラーでは、関数のコンテンツを実行するためにブラウザーに指示する必要があるため、角かっこは使用しません。それらを配置すると、ブラウザは関数の戻り値を呼び出し、エラーが発生する可能性があります。

var a = function(){
    alert("Welcome to my site");
}
window.onload = a();//Wrong, equals to undefined, since the a function doesn't return any value
window.onload = a;//Correct, calls the function a when the event is fired

これは、関数をパラメーターとしてsetIntervalメソッドを呼び出す場合にも発生します。かっこがとても重要なのはそのためです

于 2012-05-19T00:05:03.283 に答える
2

thisFunc()関数を呼び出したいときに使用します。関数への参照を値として使用する場合に使用thisFuncします。

関数にパラメーターがない場合は、コールバックの参照を使用できます。

function thisFunc() {
  // do something
}

window.setTimeout(thisFunc, 1000);

関数にパラメーターがある場合、パラメーター値を使用して呼び出すには、別の関数でラップする必要があります。

function thisFunc(param1) {
  // do something
}

window.setTimeout(function(){ thisFunc(42); }, 1000);

もちろん、パラメータのない関数を関数でラップすることもできます。

function thisFunc() {
  // do something
}

window.setTimeout(function(){ thisFunc(); }, 1000);

関数をラップするために無名関数を使用する必要はありません。名前付き関数を使用して、その関数への参照を取得できます。

function thisFunc(param1) {
  // do something
}

function callFunc() {
  thisFunc(42);
}

window.setTimeout(callFunc, 1000);
于 2012-05-19T00:15:26.307 に答える
0

別の関数で関数を実行する場合に使用()します

function log(arg) { console.log(arg); }

setTimeout(log, 1000) // Logs undefined after 1 second


log("hi"); // logs the String hi

この機能は再利用可能なので、実際に自分で使用することができます

function logUsingTheLogMethod( callback ) {
    if ( typeof callback === "function" ) {
        callback( "This will log to the console!" );
        callback( log === callback ); // Logs true
    }
}
logUsingTheLogMethod( log );

これはJSの一般的なパターンであり、メソッドのコールバックとして関数を使用します

数学を実行する関数がいくつかあるが、それらすべてのロギングメソッドを作成したくないとします。

function add(a,b,fn) {
    if ( fn === log ) {
       fn( a + b );
    }
}
function subtract(a,b,fn) {
    if ( fn === log ) {
       fn( a - b );
    }
}

add(1, 2, log); // logs 3
subtract(5, 4, log) // logs 1

または、関数を変更して、ログ関数ではなく関数であることを確認し、応答で何でもできるようにします

function add(a,b,fn) {
    if ( typeof fn === "function" ) {
       fn( a + b );
    }
}

// answer is automatically passed in by the calling add method
add( a, b, function ( answer ) { 
     // do ssomething with the answer
     alert( answer );
});
于 2012-05-19T00:08:54.253 に答える