DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> 關於new Function使用
關於new Function使用
編輯:JavaScript基礎知識     

一直對Function()一知半解,今日就Function()的使用做一下總結

一、函數實際是功能完整的對象,用Fucntion()直接創建函數。

語法規則:
    var 函數名 = new Function( arg1, arg2, arg3, ..., argN, body );
    解釋:
    Function 構造函數所有的參數都是字符串類型的,body是生成函數的函數體。

實例:求多個參數的和

var fnSum = new Function( 
                'var total = 0,args = arguments;for (var i = 0; i < args.length; i++ ) {total += args[ i ];}return total;' );
            var res = fnSum(4,5,6);
            alert ( res );
View Code

注意:以上代碼不允許有空格

對以上寫法加以改進

第一種寫法(傳統):將字符串分割

var fnSum = new Function(
                'var total = 0, ' +
                '    args = arguments;' + 
                'for ( var i = 0; i < args.length; i++ ) { ' +
                '    total += args[ i ]; ' +
                '} ' +
                'return total; '
            );
            var res = fnSum( 1,2,3,4 );
            alert ( res );//10
View Code

第二種寫法:吸收了MVC思想

<script id="engin">             
                 /*var total = 0, 
                    args = arguments, 
                    len = args.length;
                for ( var i = 0; i < len; i++ ) {
                    total += args[ i ];
                }
                return total;*/             
        </script>
        <script>
            var getBody = function ( id ) {
            var script = document.getElementById( id );
            var body = script.innerHTML.replace('/*', '').replace('*/', '');        
            script.parentNode.removeChild( script );
            return body;
        }
            onload = function () {                
                var fnSum = new Function( getBody( 'engin' ) );                
                var res = fnSum( 1, 2, 3 );            
                alert( res );    //6
            };        
View Code

二、Function 和 eval 都可以實現字符串執行代碼在實際開發中, 如果考慮效率可以直接使用 eval,但是考慮安全性則建議使用 Function

var str = '{ name: "jim" }';
eval( 'var o = ' + str )
//var o = eval( '(' + str + ')' ); 等同於上句
console.log(o);//Object {name: "jim"}


 

eval( 'var a = 10;' );  // eval 會污染全局變量
   eval 等價於 var a = 10;//全局變量

 

eval()是一個頂級函數並且跟任何對象無關。

eval()的參數是一個字符串。如果字符串表示了一個表達式,eval()會對表達式求值。如果參數表示了一個或多個JavaScript聲明, 那麼eval()會執行聲明。不要調用eval()來為算數表達式求值; JavaScript 會自動為算數表達式求值。

如果要將算數表達式構造成為一個字符串,你可以用eval()在隨後對其求值。比如,你有一個變量 x ,你可以通過一個字符串表達式來對涉及x的表達式延遲求值,將 "3 * x + 2",當作變量,通過在腳本中調用eval(),隨後求值。

如果參數不是字符串,eval()將會將參數原封不動的返回。在下面的例子中,字符串構造器是指定的,eval()返回了字符串對象而不是對字符串求值。

eval() 是一個危險的函數, 它可以像擁有調用者的權力一樣調用代碼。如果你使用了字符串來運行eval(),那麼你的代碼可能被惡意方(不懷好意的人)影響, 通過在使用方的機器上使用惡意代碼,可能讓你失去在網頁或者擴展程序上的權限 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/eval

 

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