2016-07-22 20 views
1

これは、新しいphonegapプロジェクトでデフォルトで作成されるindex.jsファイルのコードスナップです。 11行目でJavaScript関数で呼び出しが行われない理由

var app = { 
    // Application Constructor 
    initialize: function() { 
     this.bindEvents(); 
    }, 
    // Bind Event Listeners 
    // 
    // Bind any events that are required on startup. Common events are: 
    // 'load', 'deviceready', 'offline', and 'online'. 
    bindEvents: function() { 
     document.addEventListener('deviceready', this.onDeviceReady, false); 
    }, 
    // deviceready Event Handler 
    // 
    // The scope of 'this' is the event. In order to call the 'receivedEvent' 
    // function, we must explicitly call 'app.receivedEvent(...);' 
    onDeviceReady: function() { 
     app.receivedEvent('deviceready'); 
    }, 
    // Update DOM on a Received Event 
    receivedEvent: function(id) { 
     var parentElement = document.getElementById(id); 
     var listeningElement = parentElement.querySelector('.listening'); 
     var receivedElement = parentElement.querySelector('.received'); 

     listeningElement.setAttribute('style', 'display:none;'); 
     receivedElement.setAttribute('style', 'display:block;'); 

     console.log('Received Event: ' + id); 
    } 
}; 

document.addEventListener('deviceready', this.onDeviceReady, false); 

私はここthis.onDeviceReady()ようには()がない理由this.onDeviceReadyはそう関数呼び出しであると仮定?

+0

これは関数呼び出しではなく、関数です。 –

答えて

3

this.onDeviceReadyここで機能参照です。機能上、()を使用するとすぐに呼び出されます。

関数参照を使用すると、その関数は他の関数に渡され、何らかのイベントが発生すると関数が呼び出されます。

これは

function somefun(callback) { 


    // When something ASYNCHRONOUS process completes, call the callback function 
    callback(); 
} 

var myFun = function() { 
    console.log('in myFun'); 
}; 

function somefun(myFun); 
+0

ここでコールバックはmyfunを参照しますか? – KCK

+0

@kashyapkotak右。 – Tushar

1

と同じであり、我々が参照としての機能を通過させながらthis.onDeviceReadyと一緒に()を使用している場合は、onDeviceReady()メソッドはすぐに呼び出されます。

関連する問題