DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> ECMAScript5之StrictMode
ECMAScript5之StrictMode
編輯:JavaScript基礎知識     

ECMAScript5引入一個嚴格模式的概念(Strict Mode)。

它的作用就是不讓Javascript的容錯那麼高,讓我們對編寫代碼的規范要求高一點。

比如,當我們使用嚴格模式編寫JavaScript代碼時,我們不能隱式的申明變量,必須帶var。

那怎麼使用嚴格模式(Strict Mode)呢?

當我們想讓代碼啟動嚴格模式(Strict Mode)時,我們可以在代碼的開頭或者函數function的開頭中添加”use strict”。

倘若我們在整個代碼中啟用嚴格模式(Strict Mode),那麼所有代碼都必須遵循嚴格模式的規范;

倘若我們在一個function中啟用,那麼只在這個function中,得遵循嚴格模式的規范。

我們一起來寫個demo,體驗體驗下。

<!DOCTYPE html> 
    <head>
        <title>strict mode</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
            //啟用嚴格模式
            "use strict";
            function testFunction(){
                var testvar = 4;
                return testvar;
            }
            //This causes a syntax error.
            testvar = 5;
        </script>
    </body>
</html>

在上面的demo中,我在整個代碼中啟用嚴格模式,但我在function的外部聲明變量時,沒有加var,因此不符合嚴格模式規范,所以運行代碼時會報錯。

哈,有點意思。

剛才我們是在整個代碼中啟用嚴格模式,下面我們再來寫個demo,在function裡啟用嚴格模式。

<!DOCTYPE html> 
    <head>
        <title>strict mode</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
            function testFunction(){
                "use strict";
                testvar = 4;
                return testvar;
            }
            testvar = 5;
        </script>
    </body>
</html>

打開chrome調試器:

納尼!!怎麼沒有報錯?!!

我們再看看上面的代碼,哈哈哈,原來是我們沒有調用testFunction嘛,既然沒執行它,它怎麼會啟用嚴格模式呢?

修改代碼如下:

<!DOCTYPE html> 
    <head>
        <title>strict mode</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    <body>
        <script>
            function testFunction(){
                "use strict";
                testvar = 4;
                return testvar;
            }
            //調用testFunction
            testFunction();
            testvar = 5;
        </script>
    </body>
</html>

再看看chrome結果:

哇咔哇咔,嚴格模式還是挺嚴格的嘛,如果我們在寫代碼中,想啟用的嚴格模式,那就得注意咯。

下面列舉了在嚴格模式下的幾個重點限制:

JavaScript

限制

例子

變量

使用一個變量,但是沒有用var去聲明

    testvar = 4;

delete

刪除一個變量,函數或者agrument

    var testvar = 15;

    function testFunc(){}

    //causes fault

    delete testvar;

    delete testFunc;

屬性名

在聲明對象時,重復使用一個屬性名

    var testObj = {

         prop1: 10,

         prop2: 15,

        //causes fault

        prop1: 20

    }

參數名

在函數參數中,重復使用一個參數名

function testFunc(param1,/*causes fault*/param1){

    return 1;

}

有潛力成為關鍵字

在未來有可能成為有用的關鍵字,不能用來作為變量名或者函數名

    implements

    interface

    package

    private

    protected

    public

    static

    yield

八進制數

將八進制數賦給一個變量

    var testoctal = 010;

    var testescape = \010;

this

當this為null或者undefined的時候,它是不能被轉換成全局對象(window)的

    function testFunc(){

        return this;

    }

    var testvar = testFunc();

在不是嚴格模式下,這個testvar的值是全局對象,但在嚴格模式下,它的值卻是undefined.

eval,arguments

eval,arguments不能作為函數名或者參數名、變量名

    var eval = 10;

    var arguments =10;

arguments

在函數中,我們不能通過改變arguments,來改變對應參數值

    function testArgs(oneArg){

        arguments[0] = 20;

    }

在非嚴格模式下,我們如果想改變oneArg,可以通過Arguments[0]來改變,如上代碼這樣,執行後,oneArg和Arguments[0]的值都是20;但是在嚴格模式下,我們不能通過arguments來改變參數名的值,arguments僅僅是一個拷貝而已。

arguments.callee

不允許這麼使用

    function(testInt){

      if(testInt-- == 0){

          return;

         }

         arguments.callee(testInt);

     }

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved