Javascript 私有函數(shù)是指那些只能在定義函數(shù)的作用域內(nèi)使用的函數(shù)。這種函數(shù)可以避免名稱沖突和全局污染,確保函數(shù)的獨立性和可重用性。在 Javascript 中,私有函數(shù)可以通過閉包或者對象的方式實現(xiàn)。下面我們通過舉例來了解它們的具體實現(xiàn)方法。
閉包實現(xiàn)私有函數(shù)
下面是一個使用閉包實現(xiàn)私有函數(shù)的例子:
function add() { var num1 = 1; var num2 = 2; function sum() { return num1 + num2; } return sum(); } add(); // 輸出結(jié)果為 3 console.log(num1); // 報錯:num1 is not defined在這個例子中,我們定義了一個 add 函數(shù),它包含一個 sum 函數(shù),sum 函數(shù)能夠訪問 add 函數(shù)內(nèi)部的變量 num1 和 num2,但是在函數(shù)外部卻無法訪問這些變量。這是因為 num1 和 num2 都是在 add 函數(shù)內(nèi)部定義的局部變量,只有在 add 函數(shù)內(nèi)部才能被訪問,外部無法訪問。而 sum 函數(shù)由于是在 add 函數(shù)內(nèi)部定義的,因此也只能在 add 函數(shù)內(nèi)部使用。這就是使用閉包實現(xiàn)私有函數(shù)的一個例子。 對象實現(xiàn)私有函數(shù) 下面是一個使用對象實現(xiàn)私有函數(shù)的例子:
var Person = (function(){ var name = "Peter"; var sayName = function(){ console.log(name); }; return { sayName: sayName }; })(); console.log(Person.name); // 輸出結(jié)果為 undefined Person.sayName(); // 輸出結(jié)果為 Peter在這個例子中,我們定義了一個 Person 對象,在對象內(nèi)部定義了一個 name 變量和一個 sayName 函數(shù)。由于這兩個變量都是在對象內(nèi)部定義的,外部無法訪問。因此在 Person 對象外部輸出 name 的值會返回 undefined,而在調(diào)用對象內(nèi)部的 sayName 函數(shù)時會輸出 Peter。這就是使用對象實現(xiàn)私有函數(shù)的一個例子。 總結(jié) Javascript 私有函數(shù)是保護函數(shù)獨立性和可重用性的一種方式。使用閉包或者對象來實現(xiàn)私有函數(shù)都可以達(dá)到這個目的。在定義函數(shù)時需要注意將私有函數(shù)與外部變量分離,避免名稱沖突和全局污染。