日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ES5和ES6中的变量声明提升

發布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ES5和ES6中的变量声明提升 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ES5和ES6中的變量聲明提升

Example1:

a=2; var a; console.log( a ); //結果為2

Example2:

console.log( a ); //結果是undefined var a=2;

Example2:

foo(); //結果是1 var foo; foo = function() { console.log( 2 ); }; function foo() { console.log( 1 ); }

原理解讀:瀏覽器引擎在運行程序分為兩個階段:第一個的階段是編譯階段,該階段負責找出代碼中所有的定義聲明(包括變量和函數),并關聯到合適的作用域中;第二階段是執行階段,該階段負責找出代碼中的所有賦值聲明,并在作用域找找到第一階段的定義聲明,以供使用。
代碼解讀
第一個例子在編譯階段會將var a;這句定義聲明首先解讀關聯到全局作用域中,所以當在賦值聲明階段執行a=2;console.log(a);這兩個賦值聲明的代碼時是正常執行的,也就有了定義聲明提前了的感覺。

第二個例子也同樣是第一階段先解讀了var a,這部分定義聲明,接著在第二階段的時候執行console.log(a);的時候報undefined,說明雖然定義聲明雖然提前了,可是賦值聲明a=2;這部分仍然未提前。

第三個例子在編譯階段會將 var foo;變量定義聲明和 function foo(){...}函數定義聲明提前,然后在第二階段執行foo();賦值聲明,這里需要注意的是在這種變量和函數重復聲明的情況,函數定義申明會被提更前,原因倒不是真的是提前了,而只是在賦值聲明的時候首先會去方法域中尋找,而后才去變量域中尋找,所以導致看起來是函數申明比變量聲明更提前了。

結論:對于JS中所說的變量聲明提前,更準確的說法是變量定義聲明提前了,更準確的理解是定義聲明處于程序運行的第一個階段導致相較于賦值聲明的第二階段有了前提的效果。

總結

以上是生活随笔為你收集整理的ES5和ES6中的变量声明提升的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。