3 回答

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
簡單化??雌饋砗苷#瑤缀踝屓烁械桨参浚?/p>
var userName = "Sean";console.log(name());function name() { return userName;}
然而。如果我在頁面中包含一個非常方便的javascript庫,將高級字符轉(zhuǎn)換為基本級別表示,該怎么辦?
等等......什么?
我的意思是。如果有人輸入帶有某種重音的角色(例如法語或西班牙語),但我只想要'英語'字符?Az在我的節(jié)目中?嗯......西班牙語'n~'和法語'e /'字符(我已經(jīng)為這些字符使用了兩個字符,但你可以在表達(dá)重音的字符中進(jìn)行精神跳躍),這些字符可以被翻譯成為'n'和'e'的基本字符。
所以有一個好人已經(jīng)寫了一個全面的字符轉(zhuǎn)換器,我可以包括在我的網(wǎng)站...我包括它。
一個問題:它有一個名為'name'的函數(shù),與我的函數(shù)相同。
這就是所謂的碰撞。我們在相同的范圍內(nèi)聲明了兩個具有相同名稱的函數(shù)。我們想避免這種情況。
所以我們需要以某種方式確定代碼的范圍。
在javascript中擴(kuò)展代碼范圍的唯一方法是將其包裝在函數(shù)中:
function main() { // We are now in our own sound-proofed room and the // character-converter libarary's name() function can exist at the // same time as ours. var userName = "Sean"; console.log(name()); function name() { return userName; }}
這可能會解決我們的問題?,F(xiàn)在所有東西都是封閉的,只能在我們的開啟和關(guān)閉支架內(nèi)進(jìn)行訪問。
我們在函數(shù)中有一個函數(shù)......這看起來很奇怪,但完全合法。
只有一個問題。我們的代碼不起作用。我們的userName變量永遠(yuǎn)不會回顯到控制臺!
我們可以通過在現(xiàn)有代碼塊之后添加對函數(shù)的調(diào)用來解決此問題...
function main() { // We are now in our own sound-proofed room and the // character-converter libarary's name() function can exist at the // same time as ours. var userName = "Sean"; console.log(name()); function name() { return userName; }}main();
或之前!
main();function main() { // We are now in our own sound-proofed room and the // character-converter libarary's name() function can exist at the // same time as ours. var userName = "Sean"; console.log(name()); function name() { return userName; }}
次要問題:“主要”這個名稱還沒有被使用的可能性有多大?......非常非常苗條。
我們需要更多的范圍。以及一些自動執(zhí)行main()函數(shù)的方法。
現(xiàn)在我們來到自動執(zhí)行功能(或自動執(zhí)行,自運行,等等)。
((){})();
語法像罪一樣尷尬。但是,它的工作原理。
當(dāng)您將函數(shù)定義包裝在括號中并包含參數(shù)列表(另一組或括號?。r,它將充當(dāng)函數(shù)調(diào)用。
所以讓我們再看一下我們的代碼,使用一些自動執(zhí)行的語法:
(function main() { var userName = "Sean"; console.log(name()); function name() { return userName; } })();
因此,在您閱讀的大多數(shù)教程中,您現(xiàn)在將使用“匿名自執(zhí)行”或類似的術(shù)語進(jìn)行轟炸。
經(jīng)過多年的專業(yè)開發(fā),我強烈建議您為調(diào)試目的命名您編寫的每個函數(shù)。
當(dāng)出現(xiàn)問題時(它會出現(xiàn)問題),您將在瀏覽器中檢查回溯。它總是更容易縮小你的代碼的問題時,在堆棧跟蹤中的條目有名字!
非常啰嗦,我希望它有所幫助!

TA貢獻(xiàn)1865條經(jīng)驗 獲得超7個贊
自調(diào)用(也稱為自動調(diào)用)是函數(shù)在定義時立即執(zhí)行的。這是一個核心模式,是許多其他JavaScript開發(fā)模式的基礎(chǔ)。
它是一個偉大的粉絲:)因為:
它將代碼保持在最低限度
它強制將行為與表達(dá)分開
它提供了一個阻止命名沖突的閉包
極大 - (為什么你應(yīng)該說它好?)
它是關(guān)于一次定義和執(zhí)行一個函數(shù)。
您可以讓該自執(zhí)行函數(shù)返回一個值,并將該函數(shù)作為參數(shù)傳遞給另一個函數(shù)。
封裝很有用。
它也適用于塊范圍。
是的,您可以將所有.js文件包含在自執(zhí)行功能中,并可以防止全局命名空間污染。;)
更多這里。
添加回答
舉報