摘要:如果存在,即先聲明變量首部,不存在則從父級再次尋找直到找到為止。二解決方案閉包可能和本文關系不大,主要是閉包構建新的函數域。
本篇分為三章節來講,主要從下面幾個點講起
函數作用域
IIFE
塊級作用域
一、函數級作用域讓我們先看一段代碼
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的變量是以函數為作用域而存在的,當本地查找不到時會去父級查找。
二、解決方案:閉包IIFE可能和本文關系不大~~,主要是閉包構建新的函數域。
立即執行函數表達式:Immediately Invoked Function Expression
他的作用就是在變量被調用之前就給變量賦值
var a = (function(){ var a = 3 return a }())三、解決方案:let,const
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塊內的變量只在塊內有效
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96467.html
摘要:變量提升什么是變量提升在函數體內聲明的變量,無論你是在函數的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數的最頂端相當于第一行,但是只是提升變量的聲明,不會賦值。 1、變量提升 什么是變量提升?在函數體內聲明的變量,無論你是在函數的最底端還是中間聲明的,那么都會把該變量的聲明提升到函數的最頂端(相當于第一行),但是只是提升變量的聲明,不會賦值。 var num = 10; fu...
摘要:發布自的博客,歡迎大家轉載,但是要注意注明出處。另外,該文章收納在的個人的知識整理倉庫,歡迎投稿介紹變量提升是人們對執行上下文工作方式的一種認識,并不是官方給出的改變從字面上理解,變量提升的意思是變量和函數的聲明會在物理層移動到作用域的最前 發布自Kindem的博客,歡迎大家轉載,但是要注意注明出處。另外,該文章收納在Kindem的個人的 IT 知識整理倉庫,歡迎 Star、Fork、...
摘要:不同的是函數體并不會再被提升至函數作用域頭部,而僅會被提升到塊級作用域頭部避免全局變量在計算機編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現代 JavaScript 開發:語法基礎與實踐技巧系列文章。本文詳細討論了 JavaScript 中作用域、執行上下文、不同作用域下變量提升與函數提升的表現、頂層對象以及如何避免創建...
摘要:輸出的結果為輸出的結果為提升后輸出的結果為重新定義了變量輸出的結果為如果定義了相同的函數變量聲明,后定義的聲明會覆蓋掉先前的聲明,看如下代碼輸出練習的值是多少的值是多少第二題的解析請看這里參考資料文章文章中文版鏈接文章推薦文章變量提升 JavaScript 變量聲明提升 原文鏈接 一個小例子 先來看個例子: console.log(a); // undefined var a =...
摘要:變量提升需要注意兩點提升的部分只是變量聲明,賦值語句和可執行的代碼邏輯還保持在原地不動提升只是將變量聲明提升到變量所在的變量范圍的頂端,并不是提升到全局范圍,說明如下會輸出變量提升之后的效果函數聲明會提升,但是函數表達式就不了。 問題 有些朋友可能會覺得javascript的代碼是從上到下,一行一行的解釋執行的。如果按照這樣的思路,在有些情況下閱讀代碼會得到錯誤的結果,考慮以下代碼: ...
摘要:但是碰到聲明提升,這種想法就會被打破。聲明一個函數進行相應的操作,會得到函數聲明提升的結果。由此可以發現變量和函數的聲明都會被提升在其他代碼的前面執行。一個普通塊內部的函數聲明通常會被提升到所在的作用域的頂部。的創建初始化和賦值均會被提升。 Javascript聲明提升 在分析聲明提升之前,我認為有必要知道的兩點: 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為LHS和RHS兩...
閱讀 3683·2021-09-22 15:34
閱讀 1194·2019-08-29 17:25
閱讀 3405·2019-08-29 11:18
閱讀 1379·2019-08-26 17:15
閱讀 1745·2019-08-23 17:19
閱讀 1235·2019-08-23 16:15
閱讀 723·2019-08-23 16:02
閱讀 1341·2019-08-23 15:19