Professional javascript For Web Developers 第2版讀書筆記第3集

來源:互聯網
上載者:User

前面好像說過,js中沒有類似c#,java的文法區塊的概念。在for迴圈中定義的變數,離開了迴圈體後,仍然可以使用,如:

function outputNumbers(count){
    for (var i=0; i  <  count; i++){
        alert(i);
    }
                   
    alert(i);   //count

另外,就算在聲明一個變數,並且賦值後再聲明這個變數不會有任何問題,js會忽略重複的聲明

 

function outputNumbers(count){
    for (var i=0; i  <  count; i++){
        alert(i);
    }
                   
    var i;  //variable redeclared
    alert(i);   //count

c#和java中文法區塊的作用是用來控制變數的範圍,可js不能直接這樣使用,需要採取變通方法,如:

(function(){
    //block code here
})(); 

函數的聲明被一對圓括弧包圍,因此js會認為圓括弧包圍的是運算式,同時運算式範圍內的變數是無法被外部參考的,因此可以類比出類似區塊的概念,如:

 

function outputNumbers(count)
{
    (function () 
     {
        for (var i=0; i  <  count; i++)
        {
            alert(i);
        }
    })();
    
    alert(i);   //causes an error

匿名函數內部定義的變數當匿名函數執行結束便會銷毀,因此外部無法引用到,但是匿名函數能訪問count,因為匿名函數形成一個閉包。

 

使用這種方式的好處:

1.使用這種方式可以有效減少定義在全域上下文window內的對象,對於多人協作開發的頁面,可以減少命名衝突發生,每個開發人員可以使用他們喜歡的命名而不用擔心會汙染到全域上下文window

 

(function(){
                   
    var now = new Date();
    if (now.getMonth() == 0  &  &  now.getDate() == 1){
        alert(“Happy new year!”);
    }
                   
})(); 

2.此方式有效減少了閉包的記憶體問題,因為沒有指向匿名函數的引用了,因此匿名函數範圍鏈在函數執行完畢便銷毀。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.