js中變數宣告以及函數宣告提升的詳細解析(附範例)
這篇文章帶給大家的內容是關於js中變數宣告以及函數宣告提升的詳細解析(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
變數宣告提升
1、變數定義
可以使用var定義變量,變數如果沒有賦值,那麼變數的初始值為undefined。
2、變數作用域
變數作用域指變數起作用的範圍。變數分為全域變數和局部變數。全域變數在全域都擁有定義;而局部變數只能在函數內有效。
在函數體內,同名的局部變數或參數的優先權會高於全域變數。也就是說,如果函數內存在和全域變數同名的局部變數或參數,那麼全域變數將會被局部變數覆蓋。
所有不使用var定義的變數都視為全域變數
3、函數作用域和宣告提前
JavaScript的函數作用是指在函數內宣告的所有變數在函數體內總是有定義的,也就是說變數在宣告之前已經可用,所有這特性稱為宣告提前(hoisting),即JavaScript函數裡的所有宣告(只是聲明,但不涉及賦值)都被提前到函數體的頂部,而變數賦值操作留在原來的位置。如下列範例:
註解:宣告事先是在JavaScript引擎的預編譯時進行,是在程式碼開始運作之前。
var scope = 'global';function f(){ console.log(scope); var scope = 'local'; console.log(scope); }
由於函數內宣告提升,所以上面的程式碼其實是這樣的
var scope = 'global';function f(){ var scope; //变量声明提升到函数顶部 console.log(scope); scope = 'local'; //变量初始化依然保留在原来的位置 console.log(scope); }
經過這樣變形之後,答案就非常明顯了。由於scope在第一個console.log(scope)語句之前就已經定義了,但是並沒有賦值,因此此時scope的指是undefined.第二個console.log(scope)語句之前,scope已經完成賦值為'local',所以輸出的結果是local。
函數宣告提升
函數宣告語法
f('superman');function f(name){ console.log(name); }
函數表達式語法
f('superman');var f= function(name){ console.log(name); }
執行上面的程式碼,會報錯Uncaught ReferenceError: f is not defined(…),錯誤訊息顯示說f沒有被定義。
為什麼同樣的程式碼,函數宣告和函數表達式有差異呢?
這是因為,函數宣告有一個非常重要的特徵:函數宣告提升,函數宣告語句將會被提升到外在腳本或是外在函數作用域的頂端(是不是跟變數提升非常類似)。正是因為這個特徵,所以可以把函數宣告放在呼叫它的語句後面。如下面例子,最終的輸出結果應該是什麼? :
var getName = function(){ console.log(2); }function getName (){ console.log(1); } getName();
可能會有人覺得最後輸出的結果是1。讓我們來分析一下,這個例子涉及了變數宣告提升和函數宣告提升。如同前面說到的函數宣告提升,函數宣告function getName(){}的宣告會被提前到頂端。而函數表達式var getName = function(){}則表現出變數宣告提升。因此在這種情況下,getName也是一個變量,因此這個變數的宣告也會提升到底部,而變數的賦值仍然保留在原來的位置。要注意的是,函數優先,雖然函數宣告和變數宣告都會被提升,但是函數會先被提升,然後才是變數。因此上面的函數可以轉換成下面的樣子:
function getName(){ //函数声明提升到顶部 console.log(1); } var getName; //变量声明提升 getName = function(){ //变量赋值依然保留在原来的位置 console.log(2); } getName(); // 最终输出:2
所以最終的輸出結果是:2。在原來的例子中,函數宣告雖然是在函數表達式後面,但由於函數宣告提升到頂部,因此後面getName又被函數表達式的賦值運算給覆寫了,所以輸出2。
相關推薦:
#
以上是js中變數宣告以及函數宣告提升的詳細解析(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C++中的預設參數提供函數參數指定預設值的功能,從而增強程式碼可讀性、簡潔性和靈活性。宣告預設參數:在函數宣告中將參數後面加上"="符號,後面接著預設值。用法:函數呼叫時,若未提供可選參數,則會使用預設值。實戰案例:計算兩個數之和的函數,一個參數必填,另一個可填且有預設值0。優點:增強可讀性、增加彈性、減少樣板程式碼。注意事項:只能在聲明中指定,必須位於末尾,類型必須相容。

解決C++程式碼中出現的「error:useofundeclaredidentifier'variable'」問題在使用C++進行程式設計時,我們常常會遇到各種各樣的錯誤。其中一個常見的錯誤是「error:useofundeclaredidentifier'variable'」。這個錯誤通常意味著我們在程式碼中使用了一個未宣告的變數。這篇文章將詳

在C++中,函數宣告和定義的順序會影響編譯和連結過程。最常見的是聲明在前,定義在後;也可使用「forwarddeclaration」將定義放在聲明前;如果兩者同時存在,編譯器將忽略聲明,僅使用定義。

函數聲明告知編譯器函數的存在,不包含實現,用於型別檢查。函數定義提供實際實現,包含函數體。區分的關鍵特徵包括:目的、位置、作用。理解差異對於編寫有效且可維護的C++程式碼至關重要。

函數宣告和定義在C++中是必要的,函數宣告指定函數的傳回類型、名稱和參數,而函數定義包含函數體和實作。首先聲明函數,然後在程式中使用它並傳遞所需的參數。使用return語句從函數傳回一個值。

C++編譯錯誤:函式呼叫與函式宣告不符,該怎麼解決?在開發C++程式時,難免會遇到一些編譯錯誤,其中一個常見的錯誤是函式呼叫與函式宣告不符的錯誤。這種錯誤廣泛存在於C++程式設計師中,由於不注意函數宣告的正確性,導致編譯問題,最終浪費時間和精力修復問題,影響開發效率。避免這種錯誤的方法需要遵循一些規範和標準實踐,以下讓我們來了解一下。什麼是函數呼叫與函數宣告不
![C++ 函數宣告中的[[nodiscard]]:揭開忽略返回值後果的神秘面紗](https://img.php.cn/upload/article/000/465/014/171455868319393.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
[[nodiscard]]屬性指示函數的回傳值不得忽略,否則將導致編譯器警告或錯誤,以防止以下後果:未初始化異常、記憶體洩漏和錯誤的計算結果。

PHP是一種非常流行的網頁開發語言,它允許開發人員在伺服器端創建動態Web應用程式。在PHP中,變數是一種基本的資料結構,用於儲存值和資料。本文將介紹如何在PHP中使用變數。變數的基本語法在PHP中宣告變數的語法非常簡單。變數名以美元符號($)開頭,後面跟著變數名。變數名稱可以是字母、數字或底線的組合,但必須以字母或底線開頭。例如,下面的程式碼聲明了一個名
