‘¦ŽžŠÖ”(function(){ ... })()‚̕ʂ̏‘‚«•û‚¢‚ë‚¢‚ë

Posted by Hiraku on 2011-04-23

JavaScript‚Å‚æ‚­Žg‚í‚ê‚éƒR[ƒh•Ð‚É‘¦ŽžŠÖ”‚Æ‚¢‚¤‚à‚Ì‚ª‚ ‚è‚Ü‚·B–³–¼ŠÖ”‚ðéŒ¾‚µ‚Ä‘¦ŽÀs‚·‚邱‚ƂŁAƒuƒƒbƒNƒXƒR[ƒv‚Ì‘¶Ý‚µ‚È‚¢JavaScript‚É‚¨‚¢‚Ä‹[Ž—“I‚ɃuƒƒbƒNƒXƒR[ƒv‚ðÄŒ»‚µ‚Ü‚·B

var a = "global";

(function(){
  var a = "local";
  alert(a); //local
})();

alert(a); //global

ˆê”Ô—L–¼‚È‚Ì‚Í‚±‚Ì(function(){ ... })()‚ÌŒ`Ž®‚È‚Ì‚Å‚·‚ªA‚È‚ºfunction‚ÌŠO‘¤‚ɃJƒbƒR‚ª•K—v‚È‚Ì‚©•sŽv‹c‚ÉŽv‚Á‚½‚±‚Æ‚Í‚È‚¢‚Å‚µ‚傤‚©H@‚½‚ß‚µ‚Éfunction(){ ... }()‚Ə‘‚¢‚Ä‚Ý‚é‚ƁASyntax Error‚ª”­¶‚µ‚Ü‚·B

‚È‚ºfunction(){ ... }()‚ÍSyntax Error‚È‚Ì‚©

JavaScript‚É‚Ífunction•¶‚ÆfunctionŽ®‚ª‚ ‚Á‚āA”÷–­‚É‹““®‚ªˆá‚¢‚Ü‚·B—–\‚ɏ‘‚¢‚Ä‚µ‚Ü‚¤‚ƁA"function"‚Æ‚¢‚¤ƒL[ƒ[ƒh‚©‚çŽn‚Ü‚é‚悤‚ɏ‘‚­‚Æ•¶‚É‚È‚èA‚»‚êˆÈŠO‚̏‘‚«•û‚ð‚·‚é‚ÆŽ®‚É‚È‚è‚Ü‚·B

—Ⴆ‚Ήº‚̂悤‚ȏ‘‚«•û‚Ì‚Æ‚«AƒZƒ~ƒRƒƒ“‚ð‘‚©‚È‚­‚Ä‚à“®‚«‚Ü‚·‚æ‚ˁH@‚±‚ê‚ÍJavaScript‚̏ˆ—Œn‚ªAfunction•¶‚Å‚ ‚é‚Æ”FŽ¯‚µ‚āAu}v‚Ì’¼Œã‚Å‹­§“I‚É•¶‚ð‹æØ‚é‚©‚ç‚Å‚·B’¼Œã‚ɃJƒbƒR‚ª‚ ‚Á‚Ä‚à˜AŒ‹‚³‚ê‚Ü‚¹‚ñB

function hoge() {
  alert("hoge");
}               // ‚±‚±‚ɃZƒ~ƒRƒƒ“‚ð‘‚­•K—v‚Í‚È‚¢I
(a == b) ? alert('a==b') : alert('a!=b') ;

‚±‚ê‚Í–³–¼ŠÖ”‚Å‚à“¯‚¶‚Ȃ̂ŁAfunction(){ ... }()‚Ə‘‚­‚ƁAˆ—Œn‚Ì“à•”‚ł͈ȉº‚̂悤‚ɉðŽß‚³‚ê‚Ä‚µ‚Ü‚¢‚Ü‚·B‚±‚Ì‚Æ‚«A();‚ÍJavaScript‚Æ‚µ‚Ä•s³‚ȍ\•¶‚Ȃ̂ŁA‚±‚±‚ŃGƒ‰[‚ª”­¶‚·‚é‚Ì‚Å‚·B

function(){ ... };
();             // <-Syntax Error!

‚±‚Ì‹““®‚ð‘Å‚¿Á‚·‚É‚ÍfunctionŽ®‚Æ‚µ‚ď‘‚­•K—v‚ª‚ ‚è‚Ü‚·B‘¦‚¿functionˆÈŠO‚©‚珑‚«Žn‚ß‚ê‚΂¢‚¢‚̂ŁA‚±‚Ì‚½‚߂ɃJƒbƒR‚ðŽg‚Á‚Ä‚¢‚é‚킯‚Å‚·B

ƒJƒbƒRˆÈŠO‚̏‘‚«•û‚ðl‚¦‚é

‹t‚ɍl‚¦‚é‚ƁAfunctionŽ®‚Æ‚µ‚Ä”FŽ¯‚³‚¹‚ç‚ê‚é\•¶‚Å‚ ‚ê‚΁A•Ê‚ɃJƒbƒR‚ðŽg‚í‚È‚­‚Ä‚à‘¦ŽžŠÖ”‚ª‘‚¯‚邱‚Æ‚É‚È‚è‚Ü‚·B‚±‚±‚ÅŽg‚¦‚é‚à‚́A‚»‚ê‚Í’P€‰‰ŽZŽq‚Å‚·B

JavaScript Garden‚É’P€‰ÁŽZ‰‰ŽZŽqu{v‚ðŽg‚Á‚½—Ⴊo‚Ä‚¢‚Ü‚·‚ªAJavaScript‚Ì’P€‰‰ŽZŽq‚ÆŒ¾‚¦‚΁u+vu-vu!vuvoidvutypeofv‚ª‚ ‚è‚Ü‚·‚̂ŁA‚±‚ê‚ç‚àŽg‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B

var a = "global";

(function(){
  var a = "another paren";
  alert(a); //"another paren"
}());

+function(){
  var a = "plus";
  alert(a); //plus
}();

-function(){
  var a = "minus";
  alert(a); //minus
}();

!function(){
  var a = "ex";
  alert(a); //ex
}();

void function(){
  var a = "void";
  alert(a); //void
}();

typeof function(){
  var a = "typeof";
  alert(a); //typeof
}();

‚±‚êA‚È‚ñ‚Æ‘S•”“®‚«‚Ü‚·‚—@–Ê”’‚¢‚Å‚·‚æ‚ˁBu+v‚́u()v‚É”ä‚ׂÄ1byteÈ—ª‚Å‚«‚é‚̂ŁA’Z‚­‘‚«‚½‚¢‚Æ‚«‚ÉŽg‚¦‚éc‚©‚ȁH

new‚͎኱“®ì‚ªˆá‚¤‚Ì‚Å’ˆÓ‚ª•K—v

ŠÖ”ŒÀ’è‚ÅŽg‚¦‚鉉ŽZŽq‚Å‚ ‚éunewv‚à’P€‰‰ŽZŽq‚̈êŽí‚Å‚·‚ªAƒXƒR[ƒv“à‚Åthis‚ÌŽ¦‚·‚à‚Ì‚ª•Ï‚í‚Á‚Ä‚­‚é‚̂ŏ­‚µ’ˆÓ‚ª•K—v‚Å‚·B‚Ü‚½AƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»‚ª”­¶‚·‚邽‚߂ɁA‚»‚Ì‘¼‚̏‘‚«•û‚É”ä‚ׂê‚Ώ­‚µƒpƒtƒH[ƒ}ƒ“ƒX‚ª—ò‚è‚Ü‚·Bi‰½–œ‰ñ‚àƒ‹[ƒv‚µ‚È‚¢ŒÀ‚è‘ÌŠ´‚Å‚«‚È‚¢ƒŒƒxƒ‹‚Å‚µ‚傤‚¯‚ǁj

new‚ɂ͈ø”‚ðŽg‚í‚È‚¢ê‡‚̓JƒbƒR‚ðÈ—ª‚Å‚«‚é‚Æ‚¢‚¤–Ê”’‚¢«Ž¿‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ð‰ž—p‚·‚é‚Ænew function(){ ... }‚Æ‚¢‚¤‘‚«•û‚ª¶‚Ü‚ê‚Ü‚·BŽáŠ±“Ç‚Ý‚â‚·‚¢‚©‚à‚µ‚ê‚Ü‚¹‚ñB

new function(){
  var a = "new";
  alert(a); //new
};

ŠŠ´

  • void‚ªˆÓŠO‚Æ“Ç‚Ý‚â‚·‚¢B
    • ˆÓ–¡“IE•¶–¬“I‚ÉŽ©‘RB
    • void‚ÍŽg‚¢‚Ç‚±‚낪‚Ù‚Æ‚ñ‚Ç‚È‚¢‚̂ŁA‘¦ŽžŠÖ”‚ÉŽg‚Á‚Ä‚¢‚ê‚΃\[ƒXƒR[ƒh‚ÌŒŸõ‚ª‚µ‚â‚·‚­‚È‚é
  • ””N•×‹­‚µ‚Ä‚àA‚Ü‚¾Œ¾Œê“I‚È”­Œ©‚ªŒ©‚‚©‚é‚Ì‚ªJavaScriptB

¦u‘¦ŽžŠÖ”v‚Æ‚¢‚¤–¼‘O‚ÍJavaScriptƒpƒ^[ƒ“‚ÅŠo‚¦‚Ü‚µ‚½B
JavaScriptƒpƒ^[ƒ“ \—D‚ꂽƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì‚½‚߂̍ì–@ [‘åŒ^–{] / Stoyan Stefanov (’˜); –L•Ÿ „ (–|–ó); ƒIƒ‰ƒCƒŠ[ƒWƒƒƒpƒ“ (Š§)


”O‚Ì‚½‚ß’Ç‹L

Œ´—‚³‚¦‚í‚©‚Á‚Ä‚µ‚Ü‚¦‚Α¼‚É‚à‚¢‚­‚ç‚Å‚à‘‚«•û‚ª‚ ‚邱‚Æ‚ª‚í‚©‚è‚Ü‚·B”z—ñƒRƒ“ƒXƒgƒ‰ƒNƒ^‚Ì[]‚ðŽg‚Á‚Ä[function(){c}()]‚Æ‚µ‚Ä‚à‚¢‚¢‚Å‚·‚µA‘ã“ü‚·‚éê‡‚Í‚»‚à‚»‚à“Á•Ê‚ȏ‘‚«•û‚Í•K—v‚È‚­Avar hoge = function(){c}();‚Æ‚»‚̂܂܏‘‚­‚±‚Æ‚ª‚Å‚«‚Ü‚·B

‚½‚¾A‘‚«•û‚É‚æ‚Á‚Ä‚Í–ß‚è’l‚ª•Ï‚í‚Á‚Ä‚µ‚Ü‚¤‚±‚Æ‚ÍŠo‚¦‚Ä‚¨‚©‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB

ƒJƒbƒR‚ð—p‚¢‚½ê‡‚Í–ß‚è’l‚ɕω»‚ª‚ ‚è‚Ü‚¹‚ñ‚ªAu+vu-v‚Í–ß‚è’l‚ðnumberŒ^‚ɃLƒƒƒXƒg‚µAu!v‚ÍboolŒ^‚ɃLƒƒƒXƒg‚µAuvoidv‚ÉŽŠ‚Á‚Ă͏í‚Ɂuundefinedv‚ð•Ô‚·‚悤‚É‚È‚è‚Ü‚·B

res = (function(){return "1"})(); //string‚Ì"1"iŒ³‚̂܂܁j
res = +function(){return "1"}(); //number‚Ì1
res = -function(){return "1"}(); //number‚Ì-1
res = !function(){return "1"}(); //false
res = void function(){return "1"}(); //undefined

‚‚ç‚‚珑‚¢‚Ä‚«‚Ü‚µ‚½‚ªŒ‹‹Ç‚Ì‚Æ‚±‚ëA(functiton(){c})()‚ªÅ‚à”Ä—p«‚ª‚‚­AƒpƒtƒH[ƒ}ƒ“ƒX‚É‚à—D‚êA‚»‚±‚»‚±‚̉“ǐ«‚à•Û‚őåŒö–ñ”‚¾‚ÆŒ¾‚¦‚é‚ñ‚¶‚á‚È‚¢‚Å‚µ‚傤‚©Bi–ß‚Á‚Ä‚«‚Ä‚µ‚Ü‚¢‚Ü‚µ‚½cj

’N‚¾‚©’m‚è‚Ü‚¹‚ñ‚ªAÅ‰‚É‚±‚Ì‹L–@‚ðŽv‚¢‚‚¢‚½l‚͈̑å‚Å‚·B

keyword: javascript

JavaScript‚̍ŐV‹LŽ–