Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
¹ØÓÚJavaScript±Õ°üµÄÓ¦ÓÃ
 
×÷Õߣºpercy507 À´Ô´£º51CTO ·¢²¼ÓÚ 2016-10-8
  1911  次浏览      32
 

±Õ°ü¾ÍÊÇÖ¸ÓÐȨ·ÃÎÊÁíÒ»¸öº¯Êý×÷ÓÃÓòÖеıäÁ¿µÄº¯Êý¡£MDN ÉÏÃæÕâô˵£º±Õ°üÊÇÒ»ÖÖÌØÊâµÄ¶ÔÏó¡£ËüÓÉÁ½²¿·Ö¹¹³É£ºº¯Êý£¬ÒÔ¼°´´½¨¸Ãº¯ÊýµÄ»·¾³¡£»·¾³Óɱհü´´½¨Ê±ÔÚ×÷ÓÃÓòÖеÄÈκξֲ¿±äÁ¿×é³É¡£´´½¨±Õ°ü×î³£¼û·½Ê½£¬¾ÍÊÇÔÚÒ»¸öº¯ÊýÄÚ²¿´´½¨ÁíÒ»¸öº¯Êý¡£

ʲôÊDZհü(Closure)

¼òµ¥½²£¬±Õ°ü¾ÍÊÇÖ¸ÓÐȨ·ÃÎÊÁíÒ»¸öº¯Êý×÷ÓÃÓòÖеıäÁ¿µÄº¯Êý¡£

MDN ÉÏÃæÕâô˵£º±Õ°üÊÇÒ»ÖÖÌØÊâµÄ¶ÔÏó¡£ËüÓÉÁ½²¿·Ö¹¹³É£ºº¯Êý£¬ÒÔ¼°´´½¨¸Ãº¯ÊýµÄ»·¾³¡£»·¾³Óɱհü´´½¨Ê±ÔÚ×÷ÓÃÓòÖеÄÈκξֲ¿±äÁ¿×é³É¡£

µ«ÊÇ£¬ÍøÉÏÕÒÁ˺öà×ÊÁÏ£¬ËüÃǶԱհüµÄ¶¨ÒåÒ²¸÷Óи÷Ñù£¬¸ãµÃÎÒÒ²²»ÖªµÀÔõôȥ¶¨Òå±Õ°üÁË£¬ËùÒԸɴ಻ȥ¶¨ÒåÁË£¬Òâ»á°É¡£

µÀ¿ÉµÀ£¬·Ç³£µÀ;Ãû¿ÉÃû£¬·Ç³£Ãû¡£

²úÉúÒ»¸ö±Õ°ü ´´½¨±Õ°ü×î³£¼û·½Ê½£¬¾ÍÊÇÔÚÒ»¸öº¯ÊýÄÚ²¿´´½¨ÁíÒ»¸öº¯Êý¡£ÏÂÃæÀý×ÓÖÐµÄ closure ¾ÍÊÇÒ»¸ö±Õ°ü£º

function func(){ 
var a = 1,b = 2;

function closure(){
return a+b;
}
return closure;
}

±Õ°üµÄ×÷ÓÃÓòÁ´°üº¬×ÅËü×Ô¼ºµÄ×÷ÓÃÓò£¬ÒÔ¼°°üº¬ËüµÄº¯ÊýµÄ×÷ÓÃÓòºÍÈ«¾Ö×÷ÓÃÓò¡£

±Õ°üµÄ×¢ÒâÊÂÏî

ͨ³££¬º¯ÊýµÄ×÷ÓÃÓò¼°ÆäËùÓбäÁ¿¶¼»áÔÚº¯ÊýÖ´ÐнáÊøºó±»Ïú»Ù¡£µ«ÊÇ£¬ÔÚ´´½¨ÁËÒ»¸ö±Õ°üÒÔºó£¬Õâ¸öº¯ÊýµÄ×÷ÓÃÓò¾Í»áÒ»Ö±±£´æµ½±Õ°ü²»´æÔÚΪֹ

function makeAdder(x) { 
return function(y) {
return x + y;
};
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2)); // 7
console.log(add10(2)); // 12

// ÊͷŶԱհüµÄÒýÓÃ
add5 = null;
add10 = null;

add5 ºÍ add10 ¶¼ÊDZհü¡£ËüÃǹ²ÏíÏàͬµÄº¯Êý¶¨Ò壬µ«ÊDZ£´æÁ˲»Í¬µÄ»·¾³¡£ÔÚ add5 µÄ»·¾³ÖУ¬x Ϊ 5¡£¶øÔÚ add10 ÖУ¬x ÔòΪ 10¡£×îºóͨ¹ý null ÊÍ·ÅÁË add5 ºÍ add10 ¶Ô±Õ°üµÄÒýÓá£

ÔÚjavascriptÖУ¬Èç¹ûÒ»¸ö¶ÔÏó²»ÔÙ±»ÒýÓã¬ÄÇôÕâ¸ö¶ÔÏó¾Í»á±»À¬»ø»ØÊÕ»úÖÆ»ØÊÕ;

Èç¹ûÁ½¸ö¶ÔÏó»¥ÏàÒýÓ㬶ø²»ÔÙ±»µÚ3ÕßËùÒýÓã¬ÄÇôÕâÁ½¸ö»¥ÏàÒýÓõĶÔÏóÒ²»á±»»ØÊÕ¡£

±Õ°üÖ»ÄÜÈ¡µÃ°üº¬º¯ÊýÖÐÈκαäÁ¿µÄ×îºóÒ»¸öÖµ£¬ÕâÊÇÒòΪ±Õ°üËù±£´æµÄÊÇÕû¸ö±äÁ¿¶ÔÏ󣬶ø²»ÊÇij¸öÌØÊâµÄ±äÁ¿¡£

function test(){ 
var arr = [];
for(var i = 0;i < 10;i++){
arr[i] = function(){
return i;
};
}
for(var a = 0;a < 10;a++){
console.log(arr[a]());
}
}
test(); // Á¬Ðø´òÓ¡ 10 ¸ö 10

¶ÔÓÚÉÏÃæµÄÇé¿ö£¬Èç¹ûÎÒÃǸıä´úÂëÈçÏÂ

function test(){ 
var arr = [];
for(let i = 0;i < 10;i++){ // ½öÔÚÕâÀï×÷³öÁ˸͝
arr[i] = function(){
return i;
};
}
for(var a = 0;a < 10;a++){
console.log(arr[a]());
}
}
test(); // ´òÓ¡ 0 µ½ 9

¶ÔÓÚÉÏÃæÁ½ÖÖ´úÂëµÄ½âÊÍ£¬Çë¿´ÎÒÔÚ segmentfault ÉÏÃæµÄÌáÎÊ£ºÁ´½Ó ±Õ°üÖÐµÄ this ¶ÔÏó

var name = "The Window"; 

var obj = {
name: "My Object",

getName: function(){
return function(){
return this.name;
};
}
};

console.log(obj.getName()()); // The Window

obj.getName()()ʵ¼ÊÉÏÊÇÔÚÈ«¾Ö×÷ÓÃÓòÖе÷ÓÃÁËÄäÃûº¯Êý£¬thisÖ¸ÏòÁËwindow¡£ÕâÀïÒªÀí½âº¯ÊýÃûÓ뺯Êý¹¦ÄÜ(»òÕ߳ƺ¯ÊýÖµ)ÊǷָµÄ£¬²»ÒªÈÏΪº¯ÊýÔÚÄÄÀÆäÄÚ²¿µÄthis¾ÍÖ¸ÏòÄÄÀï¡£ÄäÃûº¯ÊýµÄÖ´Ðл·¾³¾ßÓÐÈ«¾ÖÐÔ£¬Òò´ËÆä this ¶ÔÏóͨ³£Ö¸Ïò window¡£

var name = "The Window"; 

var obj = {
name: "My Object",

getName: function(){
var that = this;
return function(){
return that.name;
};
}
};

console.log(obj.getName()()); // My Object

±Õ°üµÄÓ¦ÓÃ

Ó¦ÓñհüµÄÖ÷Òª³¡ºÏÊÇ£ºÉè¼ÆË½Óеķ½·¨ºÍ±äÁ¿¡£ ÈκÎÔÚº¯ÊýÖж¨ÒåµÄ±äÁ¿£¬¶¼¿ÉÒÔÈÏΪÊÇ˽ÓбäÁ¿£¬ÒòΪ²»ÄÜÔÚº¯ÊýÍⲿ·ÃÎÊÕâЩ±äÁ¿¡£Ë½ÓбäÁ¿°üÀ¨º¯ÊýµÄ²ÎÊý¡¢¾Ö²¿±äÁ¿ºÍº¯ÊýÄÚ¶¨ÒåµÄÆäËûº¯Êý¡£ °ÑÓÐȨ·ÃÎÊ˽ÓбäÁ¿µÄ¹«Óз½·¨³ÆÎªÌØÈ¨·½·¨(privileged method)

function Animal(){ 

// ˽ÓбäÁ¿
var series = "²¸È鶯Îï";
function run(){
console.log("Run!!!");
}

// ÌØÈ¨·½·¨
this.getSeries = function(){
return series;
};
}

Ä£¿éģʽ(The Module Pattern)£ºÎªµ¥Àý´´½¨Ë½ÓбäÁ¿ºÍ·½·¨¡£ µ¥Àý(singleton)£ºÖ¸µÄÊÇÖ»ÓÐÒ»¸öʵÀýµÄ¶ÔÏó¡£JavaScript Ò»°ãÒÔ¶ÔÏó×ÖÃæÁ¿µÄ·½Ê½À´´´½¨Ò»¸öµ¥Àý¶ÔÏó¡£

var singleton = { 
name: "percy",
speak:function(){
console.log("speaking!!!");
},
getName: function(){
return this.name;
}
};

ÉÏÃæÊÇÆÕͨģʽ´´½¨µÄµ¥Àý£¬ÏÂÃæÊ¹ÓÃÄ£¿éģʽ´´½¨µ¥Àý

var singleton = (function(){ 

// ˽ÓбäÁ¿
var age = 22;
var speak = function(){
console.log("speaking!!!");
};

// ÌØÈ¨£¨»ò¹«ÓУ©ÊôÐԺͷ½·¨
return {
name: "percy",
getAge: function(){
return age;
}
};
})();

ÄäÃûº¯Êý×î´óµÄÓÃ;ÊÇ´´½¨±Õ°ü£¬²¢ÇÒ»¹¿ÉÒÔ¹¹½¨ÃüÃû¿Õ¼ä£¬ÒÔ¼õÉÙÈ«¾Ö±äÁ¿µÄʹÓᣴӶøÊ¹ÓñհüÄ£¿é»¯´úÂ룬¼õÉÙÈ«¾Ö±äÁ¿µÄÎÛȾ¡£

var objEvent = objEvent || {}; 
(function(){
var addEvent = function(){
// some code
};
function removeEvent(){
// some code
}

objEvent.addEvent = addEvent;
objEvent.removeEvent = removeEvent;
})();

ÔÚÕâ¶Î´úÂëÖк¯Êý addEvent ºÍ removeEvent ¶¼ÊǾֲ¿±äÁ¿£¬µ«ÎÒÃÇ¿ÉÒÔͨ¹ýÈ«¾Ö±äÁ¿ objEvent ʹÓÃËü£¬Õâ¾Í´ó´ó¼õÉÙÁËÈ«¾Ö±äÁ¿µÄʹÓã¬ÔöÇ¿ÁËÍøÒ³µÄ°²È«ÐÔ¡£ Ò»¸ö±Õ°ü¼ÆÊýÆ÷

var countNumber = (function(){ 
var num = 0;
return function(){
return ++num;
};
})();

±Õ°üµÄȱÏÝ

±Õ°üµÄȱµã¾ÍÊdz£×¤ÄÚ´æ»áÔö´óÄÚ´æÊ¹ÓÃÁ¿£¬²¢ÇÒʹÓò»µ±ºÜÈÝÒ×Ôì³ÉÄÚ´æÐ¹Â¶¡£

Èç¹û²»ÊÇÒòÎªÄ³Ð©ÌØÊâÈÎÎñ¶øÐèÒª±Õ°ü£¬ÔÚûÓбØÒªµÄÇé¿öÏ£¬ÔÚÆäËüº¯ÊýÖд´½¨º¯ÊýÊDz»Ã÷Öǵģ¬ÒòΪ±Õ°ü¶Ô½Å±¾ÐÔÄܾßÓиºÃæÓ°Ï죬°üÀ¨´¦ÀíËٶȺÍÄÚ´æÏûºÄ¡£

×îºóÔÙÀ´Ò»Ð©ÓйرհüµÄÃæÊÔ? ÏÂÃæ´úÂëÖУ¬±ê¼Ç ? µÄµØ·½Êä³ö·Ö±ðÊÇʲô?

function fun(n,o){ 
console.log(o);
return {
fun: function(m){
return fun(m,n);
}
};
}

var a = fun(0); // ?
a.fun(1); // ?
a.fun(2); // ?
a.fun(3); // ?

var b = fun(0).fun(1).fun(2).fun(3); // ?

var c = fun(0).fun(1); // ?
c.fun(2); // ?
c.fun(3); // ?
undefined
0
0
0
undefined, 0, 1, 2
undefined, 0 1
1

 

   
1911 ´Îä¯ÀÀ       32
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢