2009-10-27 22 views
2

我有一個名爲age的變量和一個名爲AGE的函數。忽略我現在使用JScript不區分大小寫的問題,即age(dob)和AGE(dob)都可以工作...爲什麼JScript中的變量和同名函數之間存在衝突?

爲什麼JScript嘗試使用年齡變量作爲函數?我最好的猜測是,JScript是處理函數聲明爲雙方聲明,表達...

 
function AGE(birthDate) { 
    return cmd.Age(birthDate); 
}; 


var age = 32; 
var foo = age; // Error on AGE function 

我使用ScriptControlClass在C#應用程序,並使用JScript中作爲一個簡單的嵌入式語言來提供一些簡單的介質複雜表達我的用戶羣...

+3

JavaScript是一個更容易理解,如果你停止使用「函數foo(){...}」語法,並開始使用「無功富=函數(){...}」形式。突然的事實是,函數是您以相同方式引用的對象,因爲任何事物都變得清晰,並打開lambda樣式的編碼。 – stusmith

+0

完美的評論。^:) – Shire

回答

1

這是標準的JavaScript語法,這JavaScript tips頁的概要描述。你應該看看一個JavaScript引用;很多人推薦使用由原作者JavaScript編寫的JavaScript: The Good Parts,但您應該在購買書籍之前進行研究。

2

請確保你沒有給出一個函數和一個變量相同的名稱。如果你有一個變量,名爲my_cat和一個名爲my_cat功能,JavaScript就忘記要麼你已經存儲在my_cat變量是函數的應該做或什麼價值。由於這種奇怪的行爲,並且因爲函數名稱區分大小寫,所以命名函數的命名方式與命名變量命名方式有所不同。

+0

我無法控制我的用戶會嘗試什麼,這是我如何運行它沒有這個問題。當然話說我在所有大寫功能本來是要避免衝突... – Shire

+0

你的用戶現在是你的開發WOOO HOOOO! :) –

+0

那麼,我的用戶是數據接口專家,他們的工作是將乾淨的客戶端數據轉換爲合理的處理過程。 :)所以他們已經是部分開發者了。實際上,他們的請求是從XBASE表達式遷移到JavaScript ......但是,到目前爲止,遷移看起來很難看...... – Shire

2

在JScript/JavaScript的,函數是第一類對象。所以,函數也是變量,你可以傳遞,重用,替換等。

這應該解釋爲什麼你不能這樣做。在有錯誤的路線,目前還不清楚你分配給什麼foo的:它可能是年齡,與32值的數值變量,但它也可能是年齡的增長,函數的變量。

換句話說,這是完全合法的:

function age(birthDate) { 
    return cmd.Age(birthDate); 
}; 

var d = new Date(); 
var foo = age; 
foo(d); 

所以是這樣的:

function print42() { 
    return 42; 
} 

print42 = function() { 
    return 32; 
} 

print42(); //legal - returns 32 

如果你擔心避免衝突,你可以嘗試把一個內的功能物體改爲:

var $$MyProjectName = function() { 
    var MyFunctionName = function() { 
     // do something 
    } 

} 

// later 
var $$MyProjectInstance = new $$MyProjectName(); 
$$MyProjectInstance.MyFunctionName(); 

注意'$'在名字。這裏沒有什麼特別的。 '$'非常適合用作標識符名稱的一部分,並且您要確保您的名稱是唯一的。然而,感謝jQuery之類的$「祕密」已經開始走出去了,所以你還想添加一些額外的東西來保持獨特性。

相關問題