2012-06-19 5 views
0

그래서 저는 웹에서 튜토리얼을 읽었습니다. , errorCB 모두뿐만 아니라 인수를 필요JavaScript의 함수 인수에서 함수를 호출하는 방법은 무엇입니까?

function populateDB(tx) { 
    tx.executeSql('DROP TABLE IF EXISTS DEMO'); 
    tx.executeSql('CREATE TABLE IF NOT EXISTS DEMO (id unique, data)'); 
    tx.executeSql('INSERT INTO DEMO (id, data) VALUES (1, "First row")'); 
    tx.executeSql('INSERT INTO DEMO (id, data) VALUES (2, "Second row")'); 
} 

function errorCB(err) { 
    alert("Error processing SQL: "+err.code); 
} 

function successCB() { 
    alert("success!"); 
} 

var db = window.openDatabase("Database", "1.0", "Cordova Demo", 200000); 
db.transaction(populateDB, errorCB, successCB); 

은 마지막 줄에, 그들은 개체 dB의 방법 거래라고, 3 개 기능은 인수 필드에가 있지만, 기능 populateDB 아닌가요? 그 주장은 어디에서 불려지나요?

+0

당신은 거기에 무슨 일이 일어나고 있는지 확인하기 위해 트랜잭션 기능에 깊이 파고해야합니다. – Jrod

답변

2

데이터베이스 런타임은 원하는 경우 해당 함수를 호출하고 매개 변수를 전달합니다. "db.transaction"함수 호출에서 함수에 참조 참조를 전달합니다. 이 시점에서 함수 매개 변수는 호출 할 함수를 식별하기 때문에 필요하지 않습니다.

+0

그래서 javascrip 자체가 인수를 제대로 처리 할 것이라고 말하고 있습니까 ?? –

+0

이 맞습니다. –

+2

@qwr : JavaScript가 아니고 언어이지만,'db.transactions' 내부에'errorCallback (error)'함수 호출이있을 것입니다. 여기에서'errorCallback'은 인수로 전달하는 함수를 참조합니다. 이것에 관해서 마술 같은 것은 없습니다. –

1

이러한 함수는 콜백의 설계 방식에 따라 자동으로 인수를받습니다. 함수에 대한 참조를 전달하면 콜백이 해당 참조를 사용할 때 전체 메커니즘의 작성 방법에 따라 매개 변수가 채워집니다. 기본적으로 트랜잭션 객체는 참조를 제공 한 메소드를 호출하고 전달하려고하는 메소드를 전달하는 것을 알고 있습니다. (수행 중일 때) 반드시 수집해야합니다.

이것이 혼란스러운 이유는 트랜잭션 기능을 열지 않았기 때문입니다. 그렇게했다면 나중에 함수를 호출하고 나중에 수집하는 값을 전달하는 것을 볼 수 있습니다.)

0

자바 스크립트 함수의 내부/세트 데이터를 얻을 수있는 여러 가지 방법을 가지고, 참조 : 방법 - 전화, 인수를 적용 VAR

2

사람들은 의미하는 콜백있는 transaction 방법은 것 성공 또는 실패에 따라 하나 또는 다른 CB 기능을 호출하십시오.

방법은 다음과 같이 작동 할 수 그건 :

db.transaction = function(populateDB, errorCB, successCB) { 
    // Try to do the requested action 
    var tx = performTransaction(populateDB); 

    // If the action failed, call the error callback, 
    // otherwise call the success callback 
    if (tx==false) { 
     var err = new TransactionError(); 
     return errorCB(err); 
    } else { 
     return successCB(tx); 
    } 
} 
+0

대단히 감사합니다. 좋은 설명입니다. –

관련 문제