這也許是一個愚蠢的問題,但我是Javascript的新手,絕望的幫助。Javascript函數範圍
如果Javascript引擎會在函數外尋找全局變量,那麼傳遞參數到底有什麼意義呢?你有什麼收穫?
我明白,全局變量通常是皺眉,但我仍然不明白傳遞變量的目的。它與數據封裝有關嗎?
這也許是一個愚蠢的問題,但我是Javascript的新手,絕望的幫助。Javascript函數範圍
如果Javascript引擎會在函數外尋找全局變量,那麼傳遞參數到底有什麼意義呢?你有什麼收穫?
我明白,全局變量通常是皺眉,但我仍然不明白傳遞變量的目的。它與數據封裝有關嗎?
程序員用一些神奇的詞來描述不同類型的函數。這裏有幾個:
如果你可以看看其中的一些了你想要頭痛。關鍵是計算機科學和工程學的進步始終是降低複雜性。我們花了很多時間考慮編寫函數來達到這個目標的最佳方式。希望您可以一次性將您程序的一小部分內容放入腦中,並理解這些部分,而不必同時理解整個程序的整體功能,或者詳細實現所有其他功能的內部功能。使用全局變量不能做到這一點很好的函數,因爲:
在另一方面,如果你明確地傳遞所有的功能需要操作的數據,並明確地返回所有的結果:如果出現問題與任何這些變量的
等優點。
如果你不需要傳遞給函數的參數,那麼,你真的不需要函數。
函數通常(而且應該)用於提供代碼重用 - 在不同的變量上使用相同的函數。如果一個函數訪問全局變量,那麼每次使用它時都會執行相同的操作。如果我傳遞參數,每次使用參數時都可以使其執行不同的操作(基於這些不同的參數)。
其中一個主要的好處是它保留了附近所有功能需要的信息。只能看看函數本身,理解它的輸入是什麼,它做了什麼,輸出是什麼,這成爲可能。如果使用全局變量而不是將參數傳遞給函數,則必須遍歷代碼來查找函數在其上運行的數據。
這只是一個好處很多,但很容易理解。
也就是說,變量global到namesapce可能是有用的,特別是如果您使用類似jquery選擇器的東西,並且想要緩存性能。
如果您只打算使用函數所處理的全局變量,那麼您將始終需要知道函數的內部工作方式以及您的全局變量名稱對於他們的工作原理。
此外,如果使用全局變量,則類似於Math.abs(n)將很難在一行中調用兩次。
函數是您的代碼的可重用組件,它在提供的變量上執行一個特定代碼段,展現出不同的行爲。 封裝來自面向對象。函數更多的是爲你的程序提供結構。 另外,如果訪問的變量存在於上下文中而不是全局,則不應損害方法的執行時間。
您獲得理智。您當然可以在不傳遞參數的情況下創建程序。但最終你會弄得一團糟。 – Nosredna 2009-08-12 04:02:00