new function(){},Function,new Function()の違い

2367 ワード

関数はJavaScriptの中で重要な言語要素であり、一つの言語要素を提供しています.
functionキーワードと内蔵オブジェクトFunctionは、次のように使用法とそれらの間で区別されます.
使用方法一:
var foo01 = function() //or fun01 = function()
{
     var temp = 100;
     this.temp = 200;
     return temp + this.temp;
}

alert(typeof(foo01));
alert(foo01()); 
実行結果:
機能
300
最も一般的なfunctionの使い方は、JavaScript関数を指定します.二つの書き方で表現された運転効果は全く同じで、後者の書き方には初期化優先度が高いのが唯一の違いです.大拡号内の変数の作用領域では、thisはfoo 01の所有者であるwindowオブジェクトを指す.
使用方法二:
var foo02 = new function()
{
     var temp = 100;
     this.temp = 200;
     return temp + this.temp;
}

alert(typeof(foo02));
alert(foo02.constructor());   
実行結果:
object
300
これはpuzleのfunctionの使い方を比較して、関数を決めたようです.でも、実はこれは一つの注文です.
JavaScriptのユーザーがオブジェクトをカスタマイズしますが、ここは匿名です.この用法と関数自体の使用にはほとんど関係がありません.このスコープ自体を指す変数のスコープは、大拡散符号において構築されます.
var obj = (new function(){
   this.a = 123;
   this.fn = function(e){alert(e)};
   //return new String('123');
   //return 123;
});
obj.fn(123);
          。
(new function(){
   return '123';
})
 
(new function(){
   return new String('123');
})        ?
使用方法3:
var foo3 = new Function('var temp = 100; this.temp = 200; return temp + this.temp;');
alert(typeof(foo3));
alert(foo3()); 
実行結果:
機能
300 
システム内の関数オブジェクトを使用して関数を構築します.これは、効果と初期化の優先度が同じで、関数体が文字列で与えられています.
使い方四:
var foo4 = Function('var temp = 100; this.temp = 200; return temp + this.temp;');
alert(typeof(foo4));
alert(foo4());
実行結果:
機能
300
参考:
http://www.jb51.net/article/13894.htm
http://www.jb51.net/article/13895.htm
http://www.planabc.net/2008/02/20/javascript_new_function/
http://cykit.iteye.com/blog/72950