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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript变量提升/函数提升

發(fā)布時間:2025/3/15 javascript 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript变量提升/函数提升 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

首先 javascript 是一種弱類型、動態(tài)的、解釋型的腳本語言。

弱類型:類型檢查不嚴格,偏向于容忍隱式類型轉(zhuǎn)換。
強類型:類型檢查嚴格,偏向于不容忍隱式類型轉(zhuǎn)換。
動態(tài)類型:運行的時候執(zhí)行類型檢查。
靜態(tài)類型:編譯的時候就知道每個變量的類型。
解釋型:程序不需要編譯,程序在運行的時候才翻譯成機器語言,每執(zhí)行一次都要翻譯一次,因此效率比較低,但是跨平臺性好。
編譯型:程序在執(zhí)行之前需要一個專門的翻譯過程,把程序編譯為機器語言的文件,運行時直接使用編譯的結(jié)果就行了。
標(biāo)記語言:標(biāo)記語言的存在就是用來被讀取(瀏覽)的,而其本身是沒有行為能力的,在標(biāo)記語言里你會看到<和>這些尖括號,這是用來寫出“層次”和”屬性”的,換句話說,它是被動的。并不具備與訪問者互動的能力。
編程語言:它是具有邏輯性和行為能力,這是主動的。說通俗一點,它是有思想的。

腳本語言:它介于標(biāo)記語言和編程語言之間,腳本語言不需要編譯,可以直接用,由解釋器來負責(zé)解釋。

js代碼解析原則
首先js引擎在讀取js代碼時會進行兩個步驟,第一個步驟是解釋,第二個步驟是執(zhí)行。
所謂解釋就是會先通篇掃描所有的Js代碼,然后把所有聲明提升到頂端,第二步是執(zhí)行,執(zhí)行就是操作一類的。

例子1:

<script type="text/javascript">console.log(a);//輸出結(jié)果 undefinedvar a=10; </script>

以上代碼輸出 undefined
原因: 變量提升(把變量聲明提升到當(dāng)前執(zhí)行環(huán)境的最頂端)
上段代碼相當(dāng)于:

var a; console.log(a);//由于未賦值 所以輸出undefined a=10;

例2:

foo(); function foo(){console.log("aaa"); }

結(jié)果輸出: aaa
原理:函數(shù)聲明提升 (函數(shù)聲明提升直接把整個函數(shù)提到執(zhí)行環(huán)境的最頂端)

相當(dāng)于:

function foo(){console.log("aaa");}foo();

變量提升只提升函數(shù)名 而函數(shù)提升會提升整個函數(shù)題 注意:函數(shù)提升在變量提升上面。

例3:

foo(); var foo = function(){console.log("aaa"); }

運行結(jié)果是: foo is not a function

原因: 還是進行了變量提升
相當(dāng)于:

var foo; console.log(foo); //undefined foo(); //foo is not a function foo = function(){console.log("aaa"); }

上面代碼輸出undefined 是因為變量提升后并沒有賦值因此輸出undefined

輸出foo is not a function 原因是:js解析遇到 foo()時會默認當(dāng)做函數(shù)來解析

例4:

console.log(foo); var foo=10; console.log(foo); function foo(){console.log(10); } console.log(foo);

輸出結(jié)果:
這里寫圖片描述

原理:
相當(dāng)于:

function foo(){console.log(10); } var foo; console.log(foo); foo=10; console.log(foo); console.log(foo);

注意: 函數(shù)提升在變量提升上面,第一個console.log(foo);為什么會輸出函數(shù)題呢,原因在于 var foo; 并未有賦值只是聲明,因此他會調(diào)用上面的值

例如:

var b=10; b=10; console.log(b); //10 輸出上一個值不會輸出undefined

但是更改后:

var b=10; b=20; console.log(b); //20 輸出20不是上一個值

總結(jié):關(guān)于變量提升,一定要注意細心思考一下,還有就是要牢記,函數(shù)提升在變量提升之上

轉(zhuǎn)自:http://blog.csdn.net/demo_18/article/details/78493489

總結(jié)

以上是生活随笔為你收集整理的javascript变量提升/函数提升的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。