Seputar callback javascript

Selamat malam agan agan semua, kesekian kali saya selalu dibikin bingung dan ragu mengenai callback di javascript, terutama masalah closure yang kadang tidak begitu jelas dan misterius. ditambah lagi synchronous dan asynchronous. di beberapa modul nodejs dan beberapa fungsi built in, contohnya seperti fungsi dibawah ini.

setTimeout(function(){
	//code
},0)

fungsi diatas(setTimeout), itu kalau menurut saya kan, konsepnya mirip dengan callback. nah sebelum pertanyaannya, saya sertakan dulu kodenya dibawah.

var myjson = {
	'nama':'apa aja boleh'
}
var c = {
	add:function(param,callback){
		return callback(param);
	}
}
var d = null;

//setTimeout(function(){

	c.add(myjson,function(res){
		c.add(res,function(res){
			d = res;
			console.log(d);
		});
	});

//},0);

console.log(d);
var x = async function(param){
	return param;
}
var e = async function(param, callback){
		return await callback(x(param));
	}
var f = null;

//setTimeout(function(){

e('contoh',function(res){
	f = res;
	console.log(f);
});

//},0);

console.log(f);

code diatas. saya membuat fungsi callback yang disimpan dalam var c dan var e. dan didalam fungsi c dan e, niatnya mau merubah variable global(var d dan var f) yang bernilai null. dan kenyataannya, jika fungsi c dan e dibungkus fungsi setTimeout. value dalam variable global(var d dan var f) tidak mau berubah / tetap null.

bukan hanya fungsi setTimeout saja, fungsi lain seperti melakukan query ke mysql juga demikian(kasusnya sama dengan fungsi setTimeout).

khusus yang dibungkus setTimeout. jika kita mengganti value dari sebuah variable global(var d dan var f). itu nilainya masih sama / null semua, dan saat setTimeout di hilangkan / dihapus / dicomment. baru dia mau berubah nilainya(variable globalnya => d dan f nya berubah). oke biar lebih jelas ini hasilnya.

null // ini berasal dari var d yang di print di luar fungsi apapun
null // ini berasal dari var f yang di print di luar fungsi apapun
{ nama: 'apa aja boleh' } // ini berasal dari var d yang di print didalam fungsi callback c
Promise { 'contoh' } // ini berasal dari var f yang di print didalam fungsi callback e
//diatas adalah hasil apabila dibungkus fungsi setTimeout

{ nama: 'apa aja boleh' }
{ nama: 'apa aja boleh' }
Promise { 'contoh' }
Promise { 'contoh' }
//dan diatas hasil apabila tidak dibungkus fungsi setTimeout / tanpa dibungkus fungsi sama sekali, semuanya berubah. Tidak ada yang bernilai null.

sedangkan fungsi yang saya buat (didalam var c dan var e) juga tipenya callback, hampir mirip dengan fungsi setTimeout bukan? :D. itu kira kira kenapa yah? mungkin ada penjelasan lain, kenapa bisa begitu. terima kasih.

avatar momoji
@momoji

108 Kontribusi 44 Poin

Diperbarui 3 tahun yang lalu

Tanggapan

saya agak bingung dengan kodenya, bisadijelaskan di pertanyaan, yang mau diubah yang mana? kalimatnya juga coba dibenerin gan dipisahpisahkan *kasih paragraf biar jelas dibaca

Udah bang.

1 Jawaban:

<div>Mungkin bisa dibaca disini, karena value yang direturn dalam callback function itu tidak bisa bisa diakses secara global.<a href="https://medium.com/@aryarifqipratama/mengupas-tuntas-mengenai-apa-itu-callback-ce7bafc72173"><br>https://medium.com/@aryarifqipratama/mengupas-tuntas-mengenai-apa-itu-callback-ce7bafc72173</a></div>

avatar mudziahutama
@mudziahutama

18 Kontribusi 4 Poin

Dipost 3 tahun yang lalu

Login untuk ikut Jawaban