這篇文章跟大家介紹的內容是關於javascript中函數作用域與區塊級作用域簡單說明,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
讓我們先看一段程式碼
var a = true; function hoisting(){ if(!a){ var a = 2; } console.log(a) } hoisting(); // 最终结果:2
這段程式碼的邏輯是
首先會尋找目前函數域
中的變數。
如果存在,即先宣告變數首部,不存在則從父級再次尋找
直到找到為止。
那麼我們可以改寫為
var a; // 变量声明 a = true; // 变量定义 function hoisting(){ var a; // 变量声明 if(!a){ a = 2; //变量定义 } console.log(a) // 先从自身函数域开始查找,找不到再去父作用域 } hoisting();
javascript的變數是以函數為作用域而存在的,當本地查找不到時會去父級查找。
可能跟本文關係不大~~,主要是閉包建構新的函數域。
立即執行函數表達式:Immediately Invoked Function Expression
#他的作用就是在變數被呼叫之前就給變數賦值
var a = (function(){ var a = 3 return a }())
let與const主要作用是講javascript原來的函數級作用域調整到區塊級作用域
let a = 2; function block(){ if(!a){ let a =1 } console.log(a) } block() // 2
這個時候,函數的作用域就被劃分的更小了,以區塊級為單位。
我們可以把程式碼分成三個區塊
if區塊
block區塊
#window區塊
好,現在我們改寫一下函數會怎麼樣呢
let a = 0; function block(){ if(!a){ let a =1 } console.log(a) } block() // 0
最終結果是0,當a在目前區塊block查找不到的時候會去父級區塊查找,最後為0
而if區塊內的變數只在區塊內有效
相關文章推薦:
jQuery自呼叫匿名函數是如何呼叫的?以上是javascript中函數作用域與區塊級作用域簡單說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!