[教程]JScript中的變數引用規則(補充,函式用法說明) (轉)

worldblog發表於2007-12-13
[教程]JScript中的變數引用規則(補充,函式用法說明) (轉)[@more@]

[教程]中的變數引用規則(補充,用法說明)
by .com/,">http://www.lostinet.com/,

第一篇:">

我高考語文才496分啊,,,慘。。現在要說些什麼,都不知道。。。
還是用例子開始吧:不過例子和分析,現在寫在一起了。

這個只是補充說明,看不看都沒有關係。不會的還是看看好:)

2。1 -》函式被傳遞
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
var func=function(){alert("ok")};
function CallFunc(f)
{
 f();
}
CallFunc(func);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
一般的應用中,傳遞函式是很少見的。但是對於很多動態的應用,傳遞函式就很正常了。
這個例子,func是一個函式。CallFunc(func)時,把func傳遞給CallFunc中的f
所以在
function CallFunc(f)
{
 f();
}
中,f是一個函式。所以f()是可以的。實際上就是呼叫function(){alert("ok")};

2。2 -》函式作為方法
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
var obj={};//var obj=new ();
obj.value=14;
var func=function(number){alert(this.value+number)};
obj.alert=func;
obj.alert(25);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

這個例子,說明了函式作為一個的方法,是怎樣使用的。
this是一個特殊的變數,它是一個引數。
當obj.alert(25)時,
其實是執行function(number){alert(this.value+number)};
而這個過程中obj也傳遞過去了,化身為this。
這個過程大家都比較瞭解,所以也不多說了。
要執行物件的方法,只有兩個途徑:
一:obj.method(); 必須有一個“.”的存在。
二:func.apply(obj,args),func.call(obj,arg1,arg2...),這個需要JScript5.5的支援。

2。3 -》函式作為方法,2
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
var obj={};//var obj=new Object();
obj.value=14;
var func=function(number){alert(this.value+number)};
obj.alert=func;
var method=obj.alert
method(4);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

為什麼顯示NaN呢?
雖然method=obj.alert,但是傳遞的,卻只是obj["alert"]本身,即func
所以在執行func中,沒有隱含的物件傳過去給this
this沒有被賦值,在IE中預設是window,在其他變數空間就依賴有this的空間來判斷

2。4 -》函式作為物件使用。
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function aaa()
{
 alert(this);
}
function aaa.bbb()
{
 alert(this);
}
var func=function(){};
func.bbb=aaa;
func.bbb();
func.bbb.bbb();
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
我沒有精神了,你自己理解吧。。


2。5 -》函式作為物件使用2。
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function func(){};
function func.a(){return "a"};
function func.b(){return "b"};
function func.c(){return "c"};
for(var i in func)alert(func[i]());
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

2。6 -》caller
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function Func()
{
 alert(Func.caller);
}
function CallFunc()
{
 alert(CallFunc.caller);
 Func();
}
CallFunc();
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
因為CallFunc()是全域性執行的,所以沒有函式呼叫CallFunc,所以CallFunc.caller為null
而在Func,是由CallFunc呼叫的,所以第二次顯示CallFunc

2。7 -》不依賴名字,在函式中取函式本身
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function CallFunc()
{
 alert(CallFunc);
 var fs=function(fs){return fs.caller};
 fs=fs(fs);
 alert(fs);
}
CallFunc();
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
第一次alert是做個示範。這個是直接引用CallFunc的。
var fs定義了一個很特殊的函式。
當執行fs=fs(fs)時,就取回fs的呼叫者CallFunc,所以fs引用了CallFunc了

2。8 -》arguments
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function alertBatch()
{
 var args=alertBatch.arguments;
 var arr=[];
 for(var i=0;i arr[i]=args[i];
 alert(arr.join(""));
}
alertBatch(1,"a",2,"b",3,"c",4,"d",5,"e");
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}
alertBatch.arguments是呼叫該函式的引數的陣列(不是Array)
根據這個,函式可以處理多個引數的情況。

2。9 -》Function..toString
{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---{---
function Function.prototype.toString()
{
 return "object Function";
}
function func()
{
}
alert(func);
---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}---}

 

函式的其他方面就不多說了。JScript的參考書都有說明。

 

 


 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992692/,如需轉載,請註明出處,否則將追究法律責任。

相關文章