3 回答

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