Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 240 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
240
Dung lượng
3,46 MB
Nội dung
Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 1 MC LC LI NÓI U 6 I.Hàm function 7 1.1.Kin thc nn v hàm function 7 1.1.1.Cách ti thiu hóa s bin toàn cc 8 1.2.nh ngha thut ng 13 1.3.So sánh gia vic khai báo vi biu thc : tên names và s leo thang hoisting 15 1.4.Thuc tính name ca hàm function 16 1.5.S leo thanh ca hàm function - Function Hoisting 17 1.6.Kiu mu callback 19 1.6.1.Mt ví d mu v callback 19 1.6.2.Hàm callback và phm vi tn ti ca bin trong hàm callback 22 1.6.3.Lng nghe s kin không đng b 24 1.6.4. tr Timeouts 25 1.6.5.Hàm callbacks trong các th vin 25 1.6.6.Cách tr v trong hàm functions 25 1.6.7.Các hàm functions t đnh ngha 27 1.6.8.Các hàm functions tc thi 29 1.6.8.1.Các tham s ca 1 hàm tc thi 30 1.6.8.2.Các giá tr đc tr v t các hàm tc thi 31 1.6.8.3.Cách s dng và u đim 33 1.6.9.Cách khi to các đi tng tc thi 34 1.6.10.Phân nhánh thi gian khi to - Init-Time Branching 35 1.6.11.Các thuc tính ca functions – kiu mu ti u hóa b nh Memoization Pattern 37 1.6.12.Các đi tng cu hình - Configuration Objects 39 1.6.13.Curry 41 1.6.14.Function Application 41 1.6.15.Partial Application 42 1.6.16.Currying 44 1.6.17.khi nào ta s dng Currying 47 II.T mng arrays cho ti các đi tng objects 48 2.1.Các phn t, các thuc tính, các phng thc 50 Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 2 2.2.Các mng arrays kt hp 50 2.3.Các truy cp vào các thuc tính ca đi tng 51 2.4.Cách gi các phng thc ca 1 đi tng 53 2.5.Cách bin đi các thuc tính / phng thc 54 2.6.Các s dng t khóa this 55 2.7.Các hàm to constructor 55 2.8.i tng toàn cc Global Object 57 2.9.Thuc tính to 58 2.10.Toán t instanceof 59 2.11.Các hàm functions mà tr v các đi tng objects 59 2.12.Các chuyn tip các đi tng 61 2.13.Cách so sánh các đi tng objects 62 III.Các đi tng đc xây dng sn 63 3.1.i tng object 63 3.2.i tng Mng array 64 3.3.i tng Function 67 3.3.1.Các thuc tính ca đi tng function 68 3.3.2.Các phng thc trong các đi tng objects function 71 IV.Biu thc chính quy 74 4.1.Các thuc tính ca các đi tng Objects 74 4.2.Các phng thc ca các đi tng regexp 76 4.3.Các phng thc string mà nhn các biu thc chính quy nh các tham s 76 4.3.1.search() và match() 77 4.3.2.replace() 77 4.3.3.Các hàm Replace callbacks 78 4.3.4.split() 80 4.3.5.Cách chuyn tip 1 chui string khi 1 regexp đc nh kì vng 80 4.4.Quy tc mu trong biu thc quan h 81 V.Prototype 88 5.1.Thuc tính prototype 88 5.2.Cách thêm các phng thc và thuc tính bng cách s dng Prototype 88 5.3.Cách s dng các thuc tính và phng thc ca Prototype 90 5.4.Các thuc tính chính gc so vi các thuc tính đc thêm vào qua prototype 91 Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 3 5.5.Ghi đè thuc tính ca prototype vi thuc tính chính gc 93 5.6.Các lit kê các thuc tính 94 5.7.isPrototypeOf() 97 5.8.Bí mt v __proto__ Link 98 5.9.Cách làm gia tng các đi tng đc xây dng sn 100 5.10.Mt vài ghi chú v Prototype 101 VI.S k tha 106 6.1.Các chui móc ni prototype 106 6.2.Ví d v chui móc ni prototype 107 6.3.Cách chuyn các thuc tính đc chia s vào bên trong prototype 111 6.4.Cách tha k ch t prototype 113 6.5.Hàm to Constructor tm thi - new F() 115 6.6.Uber – truy cp đi tng cha t đi tng con 117 6.7.Cách phân tách phn k tha vào trong 1 hàm function 119 VII.Các kiu mu to đi tng object 120 7.1.Các phng thc và thuc tính riêng t 120 7.1.2.Các thành viên riêng t 120 7.1.3.Các phng thc đc u tiên 121 7.1.4.Các thiu sót quyn riêng t 122 7.1.5.Object Literals và quyn riêng t 123 7.1.6.Các Prototypes v quyn riêng t 125 7.1.7.Cách phát hin các hàm riêng nh các phng thc public 126 7.2.Cách thành viên c đnh static 127 7.2.1.Các thanh viên Public Static 128 7.2.2.Các thành viên Private Static 130 7.3.Các hng s đi tng 133 7.4.Kiu mu chui hóa - Chaining Pattern 135 7.4.1.u đim và nhc đim ca kiu mu chui hóa - Chaining Pattern 136 7.5.Phng thc method() 137 VIII.Các kiu mu có kh nng tái s dng - Code Reuse Patterns 139 8.1.Kiu mu hng class so vi các kiu mu phân cp hin đi 139 8.2.Kt qu nh mong mun khi s dng s k tha theo hng classical 140 8.3.Vic k tip chui prototype 141 Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 4 8.4.Nhc đim khi s dng kiu mu #1 144 8.5.Kiu mu Classical Pattern #2 - Rent-a-Constructor – kiu mu vay mn hàm to . 145 8.5.1.Chui prototype 147 8.5.2.S đa k tha bng các hàm to vay mn 148 8.5.3.u đim và nhc đim ca kiu mu hàm khi to vay mn 149 8.6.Kiu mu Classical Pattern #3 - Rent and Set Prototype – kiu mu vay mn và thit lp prototype 149 8.7.Kiu mu Classical Pattern #4 – chia s prototype 151 8.8.Kiu mu Classical Pattern #5 – 1 hàm to tm thi 152 8.8.1.Cách lu tr Superclass 154 8.8.2.Cách cài đt li con tr hàm khi to 154 8.9.Klass 156 8.10.S k tha hng Prototypal 159 8.10.1.Tho lun 160 8.10.2.Vic b sung ECMAScript 5 162 8.10.3.S k tha bng cách sao chép các thuc tính 162 8.10.4.Mix-ins 165 8.10.5.Vay mn các phng thc Methods 166 8.10.6.Ví d : vay mn t 1 mng array 167 8.10.7.Vay mn và ràng buc 168 8.10.8.Function.prototype.bind() 170 IX.Kiu mu thit k 172 9.1.Singleton – kiu mu duy nht 172 9.1.1.Cách s dng new 173 9.1.2.Thc th trong 1 thuc tính static 174 9.1.3.Thc th trong 1 bao đóng 174 9.2.Factory – kiu mu sn xut đi tng 178 9.2.1.i tng Object Factory đc xây dng sn 181 9.3.Iterator – kiu mu bin lp 182 9.4.Façade 185 9.5.Proxy 188 9.5.1.Mt ví d mu 190 9.6.Composite 199 9.6.1.Vn đ đt ra 199 Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 5 9.6.2.Cu trúc ca kiu mu composite pattern 202 9.6.3.Các mu ví d v kiu mu Composite Pattern 203 9.6.4.Mu ví d trong JS s dng kiu mu Composite Pattern 203 9.6.5.u đim và nhc đim ca kiu mu Composite Pattern 208 9.7.Observer – ngi quan sát 210 9.7.1.Mu ví d #1: vic đt mua tp chí 211 X.Asynchronous patterns - Kiu mu không đng b 216 10.1.Li ích và thách thc vi lp trình không đng b 216 10.2.Promises 218 10.3.Khám phá Promises trong b công c JQuery 222 XI.ASYNCH JS : sc mnh ca đi tng $.DEFERRED 225 11.1.Các hàm APIS không đng b ca trình duyt 225 11.2.Cách to các ng dng 1 cách không đng b 227 11.3.Cách hiu chnh s tht bi 228 11.4.$.DEFERRED 228 11.5.Các trng hp mu 232 11.6.JQuery.Deferred và Promise 233 11.6.1.$.Deferred 234 11.6.2.Phng thc deferred.resolve() 235 11.6.3.Phng thc deferred.reject() 235 11.6.4.Phng thc Promise() 236 Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 6 LI NÓI U Tài liu đc vit ging nh 1 bn ghi chép, ghi li nhng th mà mình đư đc đc t các ebook ting anh, do vy b cc sp xp ca nó có th cha chính xác, cách trình bày không theo chun 1 ebook nào c và nhiu ch vit cha rõ ngha và không mch lc do hn ch v ngoi ng ca bn thân mình. Tài liu mang đm tính cht cá nhân do vy bn s bt gp trong tài liu này nhiu đon kí t in đm, in màu, c ch ln bt thng và đc tô màu khác nhau - đó là các đon có liên quan đn nhau hay là nhng ghi chú quan trng mà bn cn phi đc k. Ni dung trong tài liu này đc da trên các cun ebook: “JavaScript Patterns - Stoyan Stefanov”, “Object-Oriented JavaScript - Stoyan Stefanov”, “JavaScript: The Good Parts - Douglas Crockford”, và 1 s bài vit ca các tác gi mà mình không còn nh rõ na. Trc khi đc tài liu này, bn phi xác đnh mình nm rõ nhng gì thuc v c bn nht ca Javascript nh các cách khai báo, các kiu d liu c bn, các phép toán s hc, các mnh đ điu kin, ầ(nu bn có kin thc v 1 ngôn ng lp trình c bn nào đó, thì bn s làm quen vi nhng gì tài liu này b qua trong Javascript 1 cách rt nhanh chóng). Tài liu này ch tp trung vào nhng gì đc coi là đc bit nht ca Javascript so vi các ngôn ng lp trình thông dng khác, không phi dành cho nhng ngi mi bt đu hc Javascript. 1 đim na bn cn lu ý là trong tài liu này lc b phn tng tác gia Javascript vi DOM & Browser bi vì bn thân mình dùng Jquery đ thay th. Nu bn s dng Javascript kt hp vi Phonegap đ to ra các ng dng cho các nn tng mobile, thì các tài liu sau có th bn s quan tâm ti : “Phonegap cho ngi mi hc”: http://www.slideshare.net/myloveforyounqt/phonegap-cho-nguoi-moi-hoc “Cách ti u hóa môi trng lp trình ng dng cho Android”: http://www.slideshare.net/myloveforyounqt/cch-ti-u-ha-mi-trng-lp-trnh-ng-dng- cho-android-tng-tc-my-o-android Hoc đn gin truy cp vào th mc chia s sau: http://sdrv.ms/VoAXBi Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 7 I.Hàm function 1.1.Kin thc nn v hàm function Có 2 tính nng chính ca hàm functions trong JS làm cho chúng tr nên đc bit.điu đu tiên là hàm functions cng ging nh các đi tng class objects và điu th 2 là chúng cung cp 1 phm vi tn ti ca các bin Các hàm functions là các đi tng objects mà : Có th to ra 1 cách linh hot trong thi gian chy trong xut quá trình thc thi ca chng trình Có th gán vào các bin và có th tham chiu đ sao chép giá tr sang các bin khác, có th tham s hóa và trong 1 s trng hp nó có th b xóa Có th chuyn tip nh các tham s vào trong hàm functions khác và cng có th đc tr v bi hàm functions khác Có th có thuc tính và các phng thc bên trong Do vy có th xy ra trng hp 1 hàm function A – là 1 đi tng object, đi tng này cha các thuc tính và phng thc – 1 hàm B khác, hàm B nhn 1 hàm C là tham s và khi thc thi nó có th tr v hàm D. Thông thng khi ta ngh v 1 hàm function trong JS thì ta ngha v 1 đi tng object vi tính nng đc bit duy nht là đi tng object này có kh nng gi đc, điu này có ngha là nó có th đc thc thi x lý Thc t thì hàm function là đi tng object và hin nhiên ta s thy hàm to new Function() nh sau : // antipattern // for demo purposes only var add = new Function('a, b', 'return a + b'); add(1, 2); // returns 3 đon code này thì không có s ng vc gì v vic add() là 1 đi tng object. cách s dng hàm to Function() constructor không phi là cách s dng hay vì nó s gây ra 1 vài bt tin cho vic vit và đc hiu Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 8 tính nng quan trng th 2 là các hàm function cung cp 1 phm vi tn ti.bt c bin nào đc đnh ngha vi var bên trong 1 hàm function thì là 1 bin đa phng và nó không tn ti đc bên ngoài hàm function này.vic nói rng du ngoc {} không cung cp phm vi đa phng có ngha là nu ta đnh ngha 1 bin vi var bên trong 1 mnh đ if hay bên trong 1 mnh đ for hay mnh đ while thì điu này không có ngha là bin này là đa phng vi if hay for.nó ch là đa phng đi vi hàm function bao quanh nó và nu không có hàm function nào bao quanh nó thì nó là 1 bin toàn cc.nh đư nói đn chng trc thì vic ti thiu hóa s bin toàn cc là 1 s thích tt bi vì các hàm functions là bt buc đ gi các bin tn ti trong 1 phm vi có kim soát 1.1.1.Cách ti thiu hóa s bin toàn cc Js s dng các hàm functions đ kim soát phm vi tn ti ca bin.1 bin đc khai báo trong 1 hàm function là bin đa phng và nó không tn ti ngoài hàm function này.theo cách khác, các bin toàn cc là các bin đc khai báo không trong bt c hàm functions nào Mi môi trng trong JS đu là 1 đi tng toàn cc global object có th đc truy cp khi ta s dng this bên ngoài bt c hàm functions nào.mi bin toàn cc mà ta to ra tr thành 1 thuc tính ca đi tng toàn cc.di đây là 1 đon mư code nh ch ra cách to và truy cp 1 bin toàn cc trong môi trng trình duyt : myglobal = "hello"; // antipattern console.log(myglobal); // "hello" console.log(window.myglobal); // "hello" console.log(window["myglobal"]); // "hello" console.log(this.myglobal); // "hello" 1.1.1.2.Các vn đ ny sinh vi các bin toàn cc các vn đ ny sinh vi bin toàn cc là vic chúng đc chia s trong phm vi toàn b mư code trong ng dng JS.chúng sng trong cùng 1 namespace toàn cc và s luôn luôn có 1 tình hung xy ra va chm trong cách đt tên – khi 2 phn tách riêng ca 1 ng dng đnh ngha các bin toàn cc vi cùng 1 tên nhng có mc đích s dng khác nhau đây cng là vn đ thng xy ra cho các web pages nhúng mư code không đc vit bi nhà lp trình ca trang page đó ví d : Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 9 1 th vin JS ca bên th 3 Các mư Scripts t 1 đi tác qung cáo Mư code t 1 mư phân tích và lu vt ca ngi s dng bên th 3 Các loi widgets, badges, và buttons khác nhau Chúng ta nói rng 1 trong các mư scripts ca bên th 3 đnh ngha 1 bin toàn cc đc gi ví d nh result.sau đó bên trong 1 trong các hàm functions ca ta đnh ngha 1 bin toàn cc khác đc gi là result.kt qu ca điu này là bin result khai báo cui cùng s ghi đè lên bin result trc đó và mư script ca bên th 3 rt có th không hot đng Do vy điu quan trng đ làm 1 ngi hàng xóm thân thin vi các mư scripts khác là các chin thut ti thiu hóa s bin toàn cc Khá là ngc nhiên là rt d dàng to ra bin toàn cc 1 cách rt vô tình trong JS bi vì 2 tính nng ca JS.điu đu tiên là ta s dng các bin mà không khai báo chúng.và điu th 2 là JS luôn có ng ý là toàn cc vi bt kì bin nào mà ta không khai báo thì nó s tr thành 1 thuc tính ca đi tng toàn cc global object.xét ví d sau : function sum(x, y) { // antipattern: implied global result = x + y; return result; } Trong mư code trên thì result đc s dng mà không khai báo.đon code vn hot đng tt nhng sau khi hàm function này ta kt thúc vi 1 bin toàn cc result thì đây có th là ngun gc ca nhiu vn đ Theo kinh nghim thì luôn luôn khai báo các bin vi var, và ta sa li ví d trc nh sau : function sum(x, y) { var result = x + y; return result; } Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang Trung – email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 10 1 trong nhng li d dàng to ra các bin theo hng toàn cc khác chính là chui gán liên tip các bin var.xét đon ví d sau, thì bin a là đa phng nhng bin b là toàn cc : // antipattern, do not use function foo() { var a = b = 0; // } Nu ta ngn nhiên là ti sao li nh vy thì đó là bi vì s đánh giá đi t phi sang trái.đu tiên biu thc b = 0 đc đánh giá trc và ti đây thì b không đc khai báo.giá tr tr v ca biu thc này là 0 và nó đc gán vào 1 bin đa phng mi đc khai báo vi var a.theo cách khác ta có th vit li nh sau : var a = (b = 0); nu ta đư khai báo tt c các bin và thc hin chui gán thì đây là cách tt và ta không to ra các bin toàn cc 1 cách vô tình na : function foo() { var a, b; // a = b = 0; // both local } 1.1.1.3.Các hiu ng ph khi ta quên var ây là 1 đim hi khác bit gia các bin ng ý toàn cc và s đnh ngha hoàn toàn là 1 bin toàn cc – s khác bit là kh nng không xác đnh đc các bin này bng cách s dng toán t delete : Các bin toàn cc đc to ra vi var ( các bin đc to ra bên ngoài bt c hàm functions nào ) có th không b xóa Các bin ng ý toàn cc không đc to ra vi var ( bt chp nu nó đc to ra bên trong hàm function ) có th xóa [...]... tho u th c function expression u ch m ph y.d u ch m ph y n thi t trong khai t bu c trong bi u th c function expressions d t n d u ch m ph t email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 14 L u m u thi t k 1.3 a vi i bi u th c leo thang hoisting V d d ng bi u th expressions? Trong nhi ng h chuy n ti s d ng function object gi trong chu c ng : // this is a function expression, // pased as an... th c t s logic trong vi c hi u ch hide() var hide = function (nodes) { var i = 0, max = nodes.length; for (; i < max; i += 1) { nodes[i].style.display = "none"; } }; Hi ta ph i duy t 2 l n m ng nodes, t c hi pt n2l n // executing the functions hide(findNodes()); c thi hi tb n t trong m c tr v b hide() ph i l p l i 1 l n n findNodes() tr u qu c ta ch t findNodes() u ta th s v u ki ng b n trong findNodes(),... = function () { return 2 + 2; ) } (); c tr v c th c tr v tr v b d ng ph m vi c mc s c th ti li u c tr v b n getResult c th n tr v c trong res trong s s c th i : var getResult = (function () { var res = 2 + 2; return function () { return res; }; }()); c th cs d i thu i trong su vi c c n ph ic c th s d c tr v c c th i s tr c th c a thu var o = { email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum... email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 13 L u m u thi t k add ) trong bi u th N u ta b u th c cg sau : // function expression, a.k.a anonymous function var add = function (a, b) { return a + b; }; Khi ta b d ng bi u th c unnamed ng gi t function.ch g i ra c ng function object s r ng.thu n m r ng c chu i n trong is ng.n u ta gi l ch a chu t h u d ng khi s d ng 1 debug gi quy ngay b Cu... www.phonegap.vn/forum 29 L u m u thi t k p d u ngo c b t bu c n n) td trong JSLint (function () { alert('watch out!'); } )(); Ki u m u d ng b c p 1 ph m v h 1 k ch b i th page load gi thi t l p khi trang nh event handlers, t tc t c kh i t o c c th c hi n ch 1 l named function t m nh ng bi ng ta ph i d ng n n sau khi tr ra t t c it ng t i n u t o i sao ta c m vi c trong ph c th i ra b t c bi c: (function () { var days... "undefined" typeof global_fromfunc; // "undefined" trong ch tc c kh bi n antipatterns i 1.1.1.4.C c truy c p t b t c ph n code u ta c n truy c p bi nh v b tc c m vi function l ng nhau : var global = (function () { return this; }()); email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 11 L u m u thi t k yv t cb c ng t c cs y ta ph i ch p nh n 1 ki u m ch t a ta trong n n ph ti n um ur th ud c ut 1.1.1.5.Ki... function () { return this.message; } }; // usage o.getMsg(); // "call me" o.message; // "call me" o.message u chu i string ch nt th c thi trong su s d ki u m m c th vi cs d n th c hi i gi l i b t c bi i lo l cv script tc vi nt m i kh c c c th g th - ki u m c s d ng trong bookmarklets b ki u m u bookmarklets ch tc -contained email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 33 L u m u thi t k... ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 34 L u m u thi t k m c a ki u m ng v i ki u m c trong khi th c th o v namespace kh i t o m c a ki u m i thi t i thi um u u qu gi mc i thi c vi 1.6.10 i gian kh i t o - Init-Time Branching Init-time branching bi t r cg load-time branching) u ki um ut i trong su t o ra kh u ki sau khi ta nh n bi ic t 1 l n c XMLHttpRequest c h tr ts tc c as b c i native... function (el, type, fn) { // pretty much the same } }; V v i hi u qu cao.m i l n ta g i t i utils.addListener() hay utils.removeListener() m tra gi ng nhau s th a d ng init-time branching it oc trong s script t trong su h ic ng pc // AFTER // the interface var utils = { addListener: null, removeListener: null }; // the implementation if (typeof window.addEventListener === 'function') { utils.addListener... ch t d ng setTimeout().chuy n ti p chu i "thePlotThickens()" thay th cho 1 con tr um v i eval() 1.6.5 n um t m nh m k r ki n s tr th d ng l i nhi u nh ks tr nd m nc i s d ng s c thay th , ta t p trung trong d cc nd ng, m r nh v cs d n tr v li th c th uh t ng l c ch 1.6.6 t t qu c ng d li u hay 1 m ng d c thi c t l tr v u gi email: ngotrung.poli.t@gmail.com / www.phonegap.vn/forum 25 L u m u thi t k . Currying 47 II.T mng arrays cho ti các đi tng objects 48 2.1 .Các phn t, các thuc tính, các phng thc 50 Lp trình hng đi tng trong Javascript và các kiu mu thit k Ngô Quang. 2.2 .Các mng arrays kt hp 50 2.3 .Các truy cp vào các thuc tính ca đi tng 51 2.4.Cách gi các phng thc ca 1 đi tng 53 2.5.Cách bin đi các thuc tính / phng thc 54 2.6 .Các. hàm functions là các đi tng objects mà : Có th to ra 1 cách linh hot trong thi gian chy trong xut quá trình thc thi ca chng trình Có th gán vào các bin và có th tham chiu