這是我的索引檔案
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
<meta name="description" content="test">
<title>test</title>
</head>
<body>
<!-- <script src="https://cdn.jsdelivr.net/npm/@tensorflow/[email protected]/dist/tf.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/fetch.js"></script> -->
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script src="/app.js" type='text/babel'></script>
<script type="text/javascript">
fnc();
</script>
</body>
</html>
這是 app.js 檔案
function fnc() {
console.log('myname');
}
我想知道為什么控制臺會說:
Uncaught ReferenceError: fnc is not defined
at (index):19
(anonymous) @ (index):19
如果我使用 text/javascript 更改腳本型別,它可以正常作業。但是,我需要它成為 tensorflow 腳本的 babel 腳本才能在 IE11 中作業。
有人可以幫我嗎?
uj5u.com熱心網友回復:
除了@CertainPerformance的回答,
如果要fnc()直接呼叫函式,那么型別應該是text/babel,因為是在babeland 中定義的transpiled。如果你使用text/javascript它會在window物件中搜索它。
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script src="/app.js" type='text/babel'></script>
<script type="text/babel"> //<-- not text/javascript
fnc(); // works fine
</script>
uj5u.com熱心網友回復:
Babel 所做的是將現代語法的代碼轉換為舊語法。這可能是一個密集的程序 - 因此,它不會立即轉譯腳本標簽,而是會異步轉譯它們。將app.js在該點的內嵌腳本標簽的運行尚未transpiled由巴貝爾。
雖然您可以添加延遲或添加某種方法來檢測轉譯的腳本何時實際運行,但處理此類問題的更好方法是將所有代碼放入轉譯的腳本中,這樣您就不會遇到競爭條件像這些。
更好的方法是提前轉譯腳本,然后在您的頁面上托管和加載該腳本。在生產中使用 Babel Standalone 并不是一個好主意,因為它可能非常重量級 -一次將處理作業放在服務器上,在轉譯時,比每次加載頁面時都放在每個客戶端上更好。
然后你可以有類似的東西
<script src="/transpiledApp.js"></script>
<script type="text/javascript">
fnc();
</script>
它會起作用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/355694.html
