我已經看過幾個庫,它似乎不包括在文件或功能級別的"use strict";
行。因此,如果開發人員啓用嚴格模式,那麼我們如何知道庫是否兼容?當嚴格模式開啓時,可能會出現奇怪的功能或瀏覽器特定問題,這些問題不容易察覺,因此錯過了它們太遲了!我們應該使用「嚴格使用」;與第三方庫(骨幹,下劃線)?我們如何知道它們是「嚴格」兼容的?
回答
當然,"use strict"
可以肯定是used at the top of a file of concatenated scripts (MDN),所以只要他們都嚴格模式的腳本,一切都將是花花公子:如果沒有或有嚴格/非嚴格腳本的混合,還有的可能性拋出的錯誤通常不會被拋出。
使用它的最簡單的方法是保持它的發展並將其排除在生產代碼中:你知道什麼事情應該做,並且能夠找到/糾正錯誤,所以任何嚴格模式錯誤都會僅用於改善您的代碼。一旦投入生產,嚴格模式確實只會爲用戶「打破」您的網站,但對他們沒有任何好處,除非他們足夠精明地調試並向您報告(不太可能)。 由於嚴格模式是javascript的一種限制形式,因此放鬆您的語法比收緊它時更不可能導致錯誤。(主要例外是eval
,當嚴格模式被刪除時,它可以開始「泄漏」變量到周圍的範圍)。
除此之外,您仍然可以連接腳本,但只能將嚴格安全的腳本包裝在函數中以使用每個函數的嚴格模式。你不必做每個原子在這種情況下功能,只是包裝整個腳本(S)的功能:
(function(){
"use strict"
// My strict-mode script or scripts
})();
// non-strict safe scripts
當你認爲你只需要做這並不是說有更多的字符它曾經可以將全部嚴格模式腳本粘貼到該函數中。
我發現,由於嚴格模式的目標是「永遠不會意外創建全局變量」,因此不得不將全局變量顯式導出函數的缺點是,我通常已經指定window
我想要全局變量。
我想這意味着我們不應該打擾在嚴格模式下測試第三方庫,因爲它們要麼是生產準備好,要麼不是。如果作者不使用嚴格模式,那麼修復代碼並提交補丁可能非常耗時。但是,如果您願意,您的答案確實提供了一個很好的選擇。不包括嚴格的生產模式很有意義。 – DynamicDan
在嚴格模式下的一些測試可能是有用的:它會指出圖書館「偶然地」引入可能與您自己產生衝突的全局變量的情況 - 是的,我通常的做法不是等待請求,而是隻要在非嚴格模式下粘貼特定腳本,但至少可以更好地瞭解它在做什麼。 –
- 1. 我們是否應該嚴格遵守set/get規則
- 2. 我們什麼時候知道我們應該使用符號?
- 3. 如果我們的代碼對Transtional doctype有效,我們應該使用嚴格的文檔類型嗎?
- 4. 如果我們的html文件已經有「嚴格使用」,我們是否需要在外部js文件中使用「嚴格使用」?
- 5. 我們如何知道我們是僅使用WSS還是使用MOSS?
- 6. 說明「骨幹不是嚴格的MVC」
- 7. 我們應該如何改進我們對SVN的使用?
- 8. 我們應該在我們的webapp上使用Pylons還是PHP?
- 9. AS3類 - 我應該使用它們嗎?
- 10. 我們應該使用android
- 11. 如果我們要訪問網站,我們不應該使用微格式嗎?
- 12. 如何在我們的應用中使用NFC,我們如何知道該設備支持NFC?
- 13. 我們如何知道我們的應用程序是否從iphone卸載?
- 14. Websphere MQ主題 - 它們是嚴格命令的嗎?
- 15. 爲我們安裝兼容庫用PHP
- 16. 我們還應該使用服務器端網格還是使用Javascript網格?
- 17. 擴展()使用下劃線與骨幹
- 18. 即使它們應該是
- 19. 下劃線標記在骨幹中做什麼以及我們何時使用它?
- 20. 嚴格的標準:宣言「」應該是兼容'
- 21. 使用嚴格:如何測試它?
- 22. Zend_Db_Table_Abstract - 我們應該使用我們的表列名稱嗎?
- 23. 當我們在asp.net中使用Gridview時,我們應該總是使用sqldatasource嗎?
- 24. 我們如何知道用戶提交日期的格式?
- 25. 我們如何解除我們不再使用它的觀點?
- 26. 與第三方API使用骨幹
- 27. 我們是否聲明'jQuery或者我們只是使用它?
- 28. 什麼是私人FrameWorks,我們將如何使用它們?
- 29. 我們應該創造它
- 30. 我們如何知道是否使用任何視圖
請參閱[這個問題](http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it) – Beterraba
是的,我已經看到了這個問題,但更多的是關於使用它,而不是找出一個庫是否支持嚴格模式。普遍的共識是始終使用嚴格模式,但是它不得不修復不支持它的第三方代碼而頭痛。也許這只是一個文檔問題。作者應該在他們的代碼中有一個標準,例如//支持嚴格模式。 – DynamicDan
在文件中使用嚴格模式時,它僅適用於實際寫入該文件的代碼。即使它不是以嚴格模式寫入,也可以使用其他庫中的函數。 – Beterraba