當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript预解析
生活随笔
收集整理的這篇文章主要介紹了
JavaScript预解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
1.js引擎運行js分為兩步:預解析 代碼執行? ? ? ?
2.預解析分為 變量預解析 和 函數預解析
3.用代碼解釋js預解析
4.經典案例
1.js引擎運行js分為兩步:預解析 代碼執行? ? ? ?
JavaScript 是 輕量級 解釋型 弱類型 腳本語言
所謂的 預解析/預解釋/預編譯 是 JavaScript程序的一種執行方式
? ?預解析:js引擎會把 js 里面所有的 var function 提升到當前作用域的最前面
? ?代碼執行:按照代碼書寫的順序從上往下執行
2.預解析分為 變量預解析 和 函數預解析
變量預解析 也叫 變量提升
? ? 就是把所有的變量聲明提升到當前作用域的最前面,但不提升賦值操作
函數預解析 也叫 函數提升
? ? 就是把所有的函數聲明提升到當前作用域的最前面,但不調用函數
3.用代碼解釋js預解析
console.log(num); //執行結果:undefined var num = 16;//是因為預解析后,相當于 執行了以下代碼var num;//變量提升 console.log(); num = 10; fn(); // 輸出結果:18 function fn(){console.log(18); }//預解析后,相當于執行了以下代碼 function fn() {//函數提升console.log(18); } fn();//這也就解釋了 聲明式函數 在 調用函數時 fn() 既可以放在函數的下面,也可以放在函數的上面 fn(); //直接會報錯 var fun = function() { //賦值式函數無法進行函數提升console.log(20); }//預解析后,相當于執行了以下代碼var fn;//變量提升 fn(); fn = function() { console.log(20); }4.經典案例
fn(); console.log(c); console.log(b); console.log(a); function fn() {//注意一個點//var a = b = c = 22; 相當于var a = 22; b = 22; c = 22;//可不是 var a = 22; var b = 22; var c = 22;想要是這樣的,可以是:var a,b,c = 22;var a = b = c = 22; console.log(a);console.log(b);console.log(c); }//預解析后,相當于執行了以下代碼function fn() {var a;a = 22;//b和c直接賦值 沒有var聲明,相當于是全局變量 b = 22;c = 22;console.log(a); //22console.log(b); //22console.log(c); //22 } fn(); console.log(c); //22 console.log(b); //22 console.log(a); //undefined總結
以上是生活随笔為你收集整理的JavaScript预解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity网格合并插件MeshBaker
- 下一篇: SpringBoot理解