預解釋分析規律
1)預解釋
2)代碼從上到下的執行;
3)當我們遇到"函數定義階段"的時候,不管,因為在預解釋階段,函數已經聲明+定義過了;
4)當我們遇到"函數調用階段"的時候
+ 形成私有作用域
+ 形參賦值
+ 預解釋
+ 代碼從上到下的執行
注意:在函數調用,一定要/順帶寫上"該函數對應的內存地址",因為找上級作用域的時候要用到
- 上級作用域:上級作用域跟函數在哪里調用無關,只跟該函數對應的堆內存在哪里開辟有關;
關注
1、內存和內存釋放:
1)不釋放 i i++
2)不立即釋放
3)就釋放:一點私有作用域得到釋放,函數的每次調用之間,沒有任何關系;
2、預解釋無節操
1、 只對等號左邊帶var的,聲明但不定義
2、 聲明過的不會進行重復聲明,但會重新賦值;
3、 自執行函數不會進行預解釋,只有執行到的他的時候,聲明+定義+調用同步完成
4、 (針對IE10及10以下) 條件判斷語句中,無論條件是否成立,都會進行預解釋
5、 return后面的語句,不會進行預解釋;return下面的語句,雖然不執行,但會進行預解釋;
3、this
1、 當函數被調用的以后,看前面是否有".",點前面是誰,this就是誰;
2、 當元素身上的事件,被觸發的時候,會執行一個函數,函數中的this,指向當前這個元素
3、 自執行函數中的this-window;
4、 回調函數中的this,一般是window;
5、 構造函數中的this,都是實例;
4、帶var和不帶var
1、帶var:1)會預解釋 2)在私有作用域下,是私有變量
2、不帶var:1)不會預解釋 2)在私有作用域下,是window的全局屬性;
5、 運算符的優先級
- 算術》比較》邏輯》賦值;
////////////////////
對象2大特征:1)屬性 2)方法
面向對象的特點
- 封裝:低耦合高內聚;( 同樣的功能,只需要寫一次,把他封裝起來,以后在遇到類似的功能,只需要調用即可;可以避免大量冗余代碼;)
- 繼承:子類繼承父類的屬性和方法;
- 多態:包含重載和重寫
- 重載:JS中沒有嚴格意義上的重載,但是有類似重載的功能,就是傳不同的參數可以實現不同的需求
- 重寫:子類可以重寫父類的屬性和方法;
面試對象設計思想
- 單例模式:把描述同一對象的屬性和方法,都放在同一個命名空間下;
- 本質就是對象 {};
- 模塊化開發的思想:對于一個大型項目,我們會分配給不同的前端人員一起開發,各自負責各自的模塊,等開發完成的時候,進行進行代碼合并;
- 單例模式在開發中
1、不同模塊之間的相互調用:對象.屬性名
2、同一模塊之間的相互調用:this.屬性名; - 優點:
1、最常用最簡單的模塊化開發
2、避免全局變量的沖突
3、可以模塊之間的相互調用; - 缺點:當對象特別多,每個對象都有類似的屬性和方法,會造成大量的冗余代碼;
- 解決辦法:工廠模式;
- 工廠模式
- 本質就是:普通的函數封裝
//new Person() function person(name,age) { // 1)創建一個空對象; var obj={}; //2)加工對象:本質就是給對象添加屬性和方法; obj.name=name; obj.age=age; obj.showName=function () { //當元素身上的事件,被觸發的時候,會執行一個函數,函數中的this,指向當前這個元素; alert('我的名字是'+this.name) } // 3) 返回對象; return obj; }
- 工廠模式主要包含三步
1、引進原材料 var obj={}
2、加工原材料 給對象添加屬性和方法
3、輸出產成品 返回對象; - 優點:避免大量冗余代碼,提高開發效率;
- 不足點:長得跟系統方法不一樣
1、首字母小寫,系統大寫
2、沒有new;
- 構造函數模式
- 構造函數和工廠模式的區別
- 從函數內在的區別
1、工廠模式有三步:1)創建空對象 2)加工對象:給對象添加實例和方法 3)返回對象
2、構造函數有1步:只有加工對象,系統會自動幫我們創建一個對象,this,并且自動返回; - 從函數調用的區別
1、構造函數,首字母大寫,而工廠模式是首字母小寫
+ var ary=new Array() 構造函數
+ var person=person() 工廠模式
2、構造函數有new,工廠模式沒有new
- 從函數內在的區別
- 關于構造函數需要注意點:
- 構造函數中的this,指向實例
- 構造函數中系統會自動幫我們返回,所以,不要自己返回對象;否則,沒有我們添加的屬性和方法
- 構造函數屬性都是私有屬性
- 構造函數中new出來,都是實例,也都是對象;
- 構造函數的不足點:對于同一個功能,每創建一個實例,這個功能都是私有的方法;如果創建很多實例,就會造成內存暫用;
- 解決辦法:原型模式;
- 構造函數和工廠模式的區別
- 原型模式
1、每個函數數據(類,普通函數)類型,都有一個屬性叫做prototype
2、prototype是個對象,這個對象存放公有的屬性和方法,它天生自帶一個屬性,指向當前實例所屬的類
3、每個對象數據(object{},prototype,實例)類型,都有一個屬性叫proto,它指向當前實例所屬的類的原型; - 原型模式重點掌握:1)類 2)實例 3)prototype
原型鏈
我們查找"對象.屬性名,"的時候
1、先從實例的私有屬性開始查找,如果找到,說明該屬性是私有屬性
2、如果沒找到,通過proto,去當前實例所屬的類的原型上進行查找,找到,說明是公有屬性
3、如果沒找到,繼續通過proto繼續往上找,一直找到Object.prototype上還沒有的話,undefined!