私はbind
とcall
とapply
の機能を学んでいます。私はAPI呼び出しのコールバックを設定するバインドを使用しています。ここに私の関数です:Javascriptバインドは値による呼び出しですか?
var successCb = successCallback.bind(null, $scope.list),
errorCb = errorCallback.bind(null, $scope.list);
私はコールバックとしてそれらを使用します:
$scope.loadJson = function() {
$http.get('data.json').then(successCb, errorCb);
};
彼らが適切に呼び出さなっている
function errorCallback(list, error) {
$log.error('Somehting went wrong while loading json.');
$log.log(list, error);
}
function successCallback(list, response) {
$log.info('JSON loaded successfully.');
//$log.log(list, response);
//this works
//$scope.list = list.concat(response.data);
//this doesn't
list = list.concat(response.data);
$log.log($scope.list, list);
}
これは、私はそれらを結合しています方法です。しかし、私がlist
を更新すると、渡される実際のパラメータは更新されないという懸念があります。私はバインドのパラメータをバインドするときに、値または参照を使用してバインドされていることを知りたいですか?ここにはplunkrがあります。
** JavaScriptのすべてに値**が渡されます。私はオブジェクトが参照によって渡されると思う。 – murli2308
@ murli2308:だからこそ、私はそれを明示した。なぜなら、多くの人がそれを信じていないからだ。オブジェクトはまだ値渡しの参照値です。パラメータ変数にはオブジェクトへの参照(値)が含まれていますが、これは "渡された変数"への参照ではありません。変数 'list'に代入するのは、その変数がオブジェクト(配列)を含んでいるかどうかにかかわらず変更されるだけです。 – Bergi
ご清聴ありがとうございます。 – murli2308