當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript12-object04-毕包
生活随笔
收集整理的這篇文章主要介紹了
javascript12-object04-毕包
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
01執(zhí)行順序<script?type="text/javascript">//執(zhí)行順序?fn1();/*不會報錯,對于通過function?fn()這種寫法來定義的函數(shù),永遠(yuǎn)都會被最先初始化*/function?fn1(){alert("fn1");}//fn2();//使用如下方式定義函數(shù),不會被先執(zhí)行,如果在之前調(diào)用該函數(shù)就會報錯?/*以下函數(shù)的定義方式是現(xiàn)在內(nèi)存中創(chuàng)建了一塊區(qū)域,之后通過一個fn2的變量*指向這塊區(qū)域,這塊區(qū)域的函數(shù)開始是沒有名稱的,這種函數(shù)就叫做匿名函數(shù)??*/var?fn2=function(){alert("fn2");}</script> 02closed-scope<script?type="text/javascript">/*在JS中當(dāng)進(jìn)行函數(shù)的調(diào)用,會為每一個函數(shù)增加一個屬性scope,*通過這個屬性;來指向一塊內(nèi)存,這塊內(nèi)存中包含所有的上下文使用的變量當(dāng)在某個函數(shù)中調(diào)用了新函數(shù)之后,新函數(shù)依然會有一個作用域來指向原有的函數(shù)的scope和自己新增加的scope,這樣就形成一個鏈?zhǔn)浇Y(jié)構(gòu),這就是js中的作用域鏈?*/var?color="red";var?showColor=function(){alert(this.color);}function?changeColor(){var?anotherColor="blue";function?swapColor(){var?tempColor=anotherColor;anotherColor=color;color=tempColor;}swapColor();}changeColor();showColor();</script> 03clised-compare<script?type="text/javascript">/*通過以下操作帶來最大的好處是,compareFunction的作用域變大了?*?當(dāng)compareFunction結(jié)束之后,prop這個變量依然存在?*/function?compareFunction(prop){//匿名函數(shù)?return?function(obj1,obj2){if(obj1[prop]>obj2[prop])?return?1;else?if(obj1[prop]<obj2[prop])?return?-1;else?return?0;}}var?o1={name:"Leon",age:23};var?o2={name:"Ada",age:28};/*此時就是基于name來進(jìn)行比較*?在java或c++中,以下代碼執(zhí)行完成之后,需要進(jìn)行內(nèi)存的釋放此時對于java或c++這些靜態(tài)語言而言,prop會被釋放?但是在js中,這個作用域卻被放大了?*/?var?compare=compareFunction("age");/*此時就比較了o1和o2,在js中prop在這里依然可以被訪問,*這種通過返回函數(shù)來擴(kuò)大函數(shù)作用域的方法就是閉包??*/var?rel=compare(o1,o2);alert(rel);</script> 04clised-var<script?type="text/javascript">function?fn1(){/*創(chuàng)建一個數(shù)組*/var?fns=new?Array();for(var?i=0;i<10;i++){/*num這個變量時保存在fns這個tf這個作用域,每一個閉包的num都不一樣所有此時所消耗的內(nèi)存特別大?*/var?tf=function(num){fns[num]=function(){return?num;}}tf(i);/*數(shù)組中放的是一組函數(shù),i這個變量是保存在fn1這個作用域中的*//*?fns[i]=function(){return?i;}?*/}return?fns;}var?fs=fn1();for(var?i=0;i<fs.length;i++){/*此時通過閉包來調(diào)用所有函數(shù),當(dāng)輸出i的時候會去上一級的作用域中查找這個時候i的值已經(jīng)為10,所以連續(xù)輸出10個10每一個fs都是在不同作用域鏈中,num也是保存在不同的作用域中,所以輸出0-9*/document.write(fs[i]()+"<br>");}</script> 05closed-this<script?type="text/javascript">var?name="window";var?person={name:"zhangsan",age:23,say:function(){return?function(){return?this.name;}}}/*當(dāng)完成person.say()之后,這個函數(shù)就調(diào)用結(jié)束了,*在這個函數(shù)調(diào)用之前,this是指向person,但是在調(diào)用匿名函數(shù)的時候this就指向window,所以得到的結(jié)果是window*/alert(person.say()());</script>轉(zhuǎn)載于:https://my.oschina.net/686991/blog/363155
總結(jié)
以上是生活随笔為你收集整理的javascript12-object04-毕包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iptables 范例
- 下一篇: java基础(一)-面向对象思想