JavaScript細節成敗

來源:互聯網
上載者:User

標籤:switch   div   win   實值型別   array   形參   his   控制   記憶體   

1、var

眾所周知var用來定義變數 如 undefined,number,string,bool,array,function,object,null。

但有時候為了省事,就會出現一些記憶體泄露的情況:

function fun(){

    var a=b=1;//為了省事直接賦值

}
fun();

console.log(a);//undefined;

console.log(b);//1 此時b成了全域變數

 

function fun(){

    a=1;

    var a=2;

    console.log(a);//2;

}
fun();

console.log(a);//undefined; 編譯時間 變數 會預設轉到內容相關的首行,因此a不是全域變數

 

2、for迴圈

var arr=[1,2,3];

for(var i=0;i<arr.length;i++){

    arr.push(i);//會出現死迴圈,數組push一個值會改變自身的length,而for一直會計算arr.length

    //1、耗廢效能

    //2、迴圈修改數組不注意的情況下會出現意外的BUG

}

console.log(i);// 4 變數i可能不被注意,一直存在該內容相關的範圍 。

 

//修改之後

var arr=[1,2,3];

var i,max;

for(i=0,max=arr.length;i<max;i++){

    arr.push(i);

}

console.log(i);// 4

console.log(arr);//[1, 2, 3, 0, 1, 2]

 

3、new

var Person=function(name,age){

    this.name=name;

    this.age=age;

}

var per=new Person(‘張三‘,17);


上面new所完成的動作:

一、建立一個新對象;


二、將建構函式的範圍賦給新對象(因此this就指向了新對象);


三、執行建構函式中的代碼(為這個新對象添加屬性);


四、返回新對象賦值給per(this指向per);

 


4、function

function即是函數,也是建構函式,還可以是對象。

var fun=function(){

    console.log(this.a);

    this.c="345";

};//函數

fun.a="123",fun.b="234";//對象

var tempFun=new fun();//建構函式 輸出123

console.log(tempFun.a);//undefined

 


5、this

執行內容(EC):每當控制轉移到一段可執行代碼時,控制就進入一個執行內容。每一個函數的返回都會退出當前的執行內容。

this:執行內容(EC)中的一個屬性,在進入上下文時確定。

//閉包經典例子

var temp=1;

function fun(){
    console.log(this);
    var temp=0;
    return function(){

        console.log(this);

        this.temp+=1;
        console.log(this.temp);
    }
}

var fun2=new fun();//new會建立新對象,並執行函數 運行時this指向建立對象(未命名,調試器用fun表示) 再賦值給fun2

fun2();//(因為fun2是全域對象,即this=window) 輸出2

 

6、()括弧

1、(a+b) 運算式

2、a() 進入執行內容(運行函數)

怎麼區分呢

我的理解是 當"("前面是+、-、*、/、%、=、!等運算子時做為運算式處理;其它就會當做執行函數處理

 

7、[ ] 索引

var a=1;

a[0]=2;

console.log(a[0]);//undefined

javascript所有對象都會提供get和set的函數("參考型別"object function array string等 可以get到值,但"實值型別"number 不行)

 

8、{ }

1、建立一個新對象 var obj={};

2、建立一個局布上下文(只有function可以)

for(int i=0;i<2;i++){

    var a=i;

}

console.log(a);//2 for、switch、if等迴圈不能建立

 

9、執行內容、變數對象、範圍鏈

1、執行內容(EC) 上面說了只有function可以建立一塊局部的上下文,當前上下文被載入記憶體的時候 就變成了執行內容

2、變數對象(VO) 與執行內容相關的特殊對象 儲存上下文中的聲明

    2.1、變數(函數內聲明的變數)

    2.2、函數的聲明

    2.3、函數的形參

3、範圍鏈(Scope) 範圍是上下文中所有變數對象(包括父變數對象)的列表

JavaScript細節成敗

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.