當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript12-object04-毕包
生活随笔
收集整理的這篇文章主要介紹了
javascript12-object04-毕包
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
01執行順序<script?type="text/javascript">//執行順序?fn1();/*不會報錯,對于通過function?fn()這種寫法來定義的函數,永遠都會被最先初始化*/function?fn1(){alert("fn1");}//fn2();//使用如下方式定義函數,不會被先執行,如果在之前調用該函數就會報錯?/*以下函數的定義方式是現在內存中創建了一塊區域,之后通過一個fn2的變量*指向這塊區域,這塊區域的函數開始是沒有名稱的,這種函數就叫做匿名函數??*/var?fn2=function(){alert("fn2");}</script> 02closed-scope<script?type="text/javascript">/*在JS中當進行函數的調用,會為每一個函數增加一個屬性scope,*通過這個屬性;來指向一塊內存,這塊內存中包含所有的上下文使用的變量當在某個函數中調用了新函數之后,新函數依然會有一個作用域來指向原有的函數的scope和自己新增加的scope,這樣就形成一個鏈式結構,這就是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的作用域變大了?*?當compareFunction結束之后,prop這個變量依然存在?*/function?compareFunction(prop){//匿名函數?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來進行比較*?在java或c++中,以下代碼執行完成之后,需要進行內存的釋放此時對于java或c++這些靜態語言而言,prop會被釋放?但是在js中,這個作用域卻被放大了?*/?var?compare=compareFunction("age");/*此時就比較了o1和o2,在js中prop在這里依然可以被訪問,*這種通過返回函數來擴大函數作用域的方法就是閉包??*/var?rel=compare(o1,o2);alert(rel);</script> 04clised-var<script?type="text/javascript">function?fn1(){/*創建一個數組*/var?fns=new?Array();for(var?i=0;i<10;i++){/*num這個變量時保存在fns這個tf這個作用域,每一個閉包的num都不一樣所有此時所消耗的內存特別大?*/var?tf=function(num){fns[num]=function(){return?num;}}tf(i);/*數組中放的是一組函數,i這個變量是保存在fn1這個作用域中的*//*?fns[i]=function(){return?i;}?*/}return?fns;}var?fs=fn1();for(var?i=0;i<fs.length;i++){/*此時通過閉包來調用所有函數,當輸出i的時候會去上一級的作用域中查找這個時候i的值已經為10,所以連續輸出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;}}}/*當完成person.say()之后,這個函數就調用結束了,*在這個函數調用之前,this是指向person,但是在調用匿名函數的時候this就指向window,所以得到的結果是window*/alert(person.say()());</script>轉載于:https://my.oschina.net/686991/blog/363155
總結
以上是生活随笔為你收集整理的javascript12-object04-毕包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iptables 范例
- 下一篇: Sweet.js 用 Readtable