halo semua..salam kenal dan langsung punya pertanyaan. closure

2 views
Skip to first unread message

Ronald Widha

unread,
Nov 3, 2010, 11:31:19 PM11/3/10
to id-js
Ronald Widha dari temanmacet.com di sini.
pengen belajar javascript donk.

untuk ngemulai diskusi, pengen nanya closure di js itu apaan si. udah
berkali2 diterangin masi ga terlalu ngerti jg.

peb aryan

unread,
Nov 4, 2010, 12:12:31 AM11/4/10
to id...@googlegroups.com
2010/11/4 Ronald Widha <ronal...@gmail.com>:

Salam,

saya coba jawab yah, CMIIW.

"a closure is a first-class function with free variables that are
bound in the lexical environment.", wikipedia

so, closure itu kayak rental mobil tapi udah ada sopirnya. posisi
untuk sopir dianggap udah ditutup (nggak bisa diganti karena udah
ditunjuk sama rentalnya)

nah, sekarang tinggal diganti mobil dan rental adalah sebuah fungsi
kayak contoh kode berikut.

function sewa(jenismobil){
var driver = "Peb"
function mobil(tujuan){
return "driving to "+tujuan+" using "+jenismobil+" driven by "+driver;
}
return mobil
}

mobilsewaan = sewa("APV")
alert(mobilsewaan("bandung"))

nah, variabel jenismobil dan driver di dalam definisi fungsi mobil()
itu udah nggak bisa diganti lagi karena udah terikat ketika dibalikin
sama fungsi sewa().

julius sirait

unread,
Nov 4, 2010, 1:02:20 AM11/4/10
to id...@googlegroups.com
Halo semua,

Salam kenal dan selamat datang.
Grup nya baru di buat kemarin, postingan pertama langsung yang susah :)

Tapi emang closure wajib hukumnya buat javascript programmer.

Closure hubungannya sama scoping. Closure berguna banget buat yang
banyak main callback2.

Ada yang namanya global environment. Di bahasa manapun ada.
Kalau kita pake jquery misalnya, variable $ ada di global.

kalau kita define fungsi di global environment misalnya:

function fn1() {
var localvar = 10;

function inner1() {
return localvar;
}

return inner1;
}

dan kita panggil fn1();

Javascript buat local scoping baru. localvar tidak bisa kelihatan dari
luar fungsi fn1.

Kalau kita pake localvar diluar misalnya:
console.log(localvar); // error localvar undefined


SAMPAI DISINI MASIH SAMA AJA KONSEPNYA SEPERTI BIASA

Magic nya baru disini. Kalau kita panggil fn1 dan assign return value
ke variable di luar scope fn1:

var fn = fn1();

localvar tidak hilang!

kalau kita panggil:
fn();

fungsi diatas mengembalikan 10.


KOK BISA NGGAK HILANG?

Nah itu gue gak bisa jelaskan :) Mungkin perlu dijelaskan tentang heap
dan stack untuk menjelaskannya. Tapi terlalu implementation detail.

2010/11/4 peb aryan <peb...@gmail.com>

--
http://twitter.com/sirait

Didats Triadi

unread,
Nov 4, 2010, 9:50:38 AM11/4/10
to id-js

Cliffano Subagio

unread,
Nov 4, 2010, 6:41:55 PM11/4/10
to id...@googlegroups.com
Salam kenal semuanya,

Definisi closure favorit saya ditulis oleh Tim Caswell di sini http://howtonode.org/why-use-closure
Dia 'menyederhanakan' definisi closure yang di wikipedia menjadi lebih intuitif:

"closure adalah sebuah fungsi dalam sebuah scope dimana fungsi tersebut dapat mengakses variables di scope luarnya"

Contoh2nya seperti yang disediakan Peb dan Julius.
Visualisasi closure nya ada di link dari Didats.

Di http://howtonode.org/why-use-closure juga ada contoh sederhana kenapa closure sangat berguna
========
function setAlarm(data) {
    setTimeout(function () {
        foobar(data);
    }, 1000);
}
setAlarm('abcxyz');
========
Di sini foobar akan dieksekusi setelah timeout 1000ms, dan foobar dieksekusi di stack yang baru (berbeda dengan stack dimana setAlarm dipanggil). Nah, caranya stack yang baru ini untuk dapat mengakses data 'abcxyz' dengan closure.



2010/11/5 Didats Triadi <did...@gmail.com>
Reply all
Reply to author
Forward
0 new messages