摘要:但實際上會將其看成兩個聲明和。第二個賦值聲明會被留在原地等待執行階段。所以,就輸出外面的了函數聲明和變量聲明都會被提升。局部變量變量聲明提升局部變量由于函數體內存在變量聲明提升,所以上面代碼實際運行如下
在ES6之前,JavaScript沒有塊級作用域(一對花括號{}即為一個塊級作用域),只有全局作用域和函數作用域。變量提升即將變量聲明提升到它所在作用域的最開始的部分
引擎會在解釋 JavaScript 代碼之前首先對其進行編譯(沒錯,JavaScript
也是要進行編譯的!),而編譯階段中的一部分工作就是找到所有聲明,并用合適的作用域將他們關聯起來,即
包括變量和函數在內的所有聲明都會在任何代碼被執行前首先被處理。
1.引擎在解析 JavaScript 代碼之前首先對其進行編譯。編譯階段中的一部分工作就是找到所有的聲明,并用合適的作用域將它們關聯起來;
2.變量和函數在內的所有聲明都會在任何代碼被執行前首先被處理;
3.當定義一個 var a = 1; 時,可能會認為這是一個聲明。但 JavaScript 實際上會將其看成兩個聲明: var a; 和 a = 1; 。第一個定義聲明是在編譯階段進行。第二個賦值聲明會被留在原地等待執行階段。
**
函數提升
**
解析器在解析時對函數聲明與函數表達式有著不同的優先級,實際上編譯階段函數聲明會先于變量被提升,并使其在執行任何代碼之前可訪問,函數表達式實際上是變量聲明的一種,因此函數聲明提升優于函數表達式
函數聲明才存在函數提升
var num = 20; function test(){ console.log(num); // 20 num = 10; //去掉了var 就變成定義了全局變量了 console.log(num); // 10 } test(); console.log(num); // 10
外面的是全局的。里面的可以訪問它,里面定義的在輸出后面,且不能變量提升。所以,就輸出外面的20了
函數聲明和變量聲明都會被提升。但是函數會首先被提升,然后才是變量。
局部變量 變量聲明提升
var a= 20; function numa(){ console.log(a); // undefined var a= 10; //局部變量 console.log(a); // 10 } numa();
由于函數體內存在變量聲明提升,所以上面代碼實際運行如下:
var a = 20; function numa(){ var a; console.log(a); // undefined a = 10; console.log(a); // 10 } numa();
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/102421.html
摘要:但是碰到聲明提升,這種想法就會被打破。聲明一個函數進行相應的操作,會得到函數聲明提升的結果。由此可以發現變量和函數的聲明都會被提升在其他代碼的前面執行。一個普通塊內部的函數聲明通常會被提升到所在的作用域的頂部。的創建初始化和賦值均會被提升。 Javascript聲明提升 在分析聲明提升之前,我認為有必要知道的兩點: 一、引擎查詢變量的兩種方式 引擎查詢變量的方式可以分為LHS和RHS兩...
摘要:代碼在執行時并不完全是由上到下一行一行執行的,由此產生了一個提升的問題。第二個賦值聲明會被留在原地等待執行階段。可以得知函數聲明提升的優先權大于普通變量聲明。 JavaScript代碼在執行時并不完全是由上到下一行一行執行的,由此產生了一個提升的問題。 什么是提升 可以簡單理解為:聲明(變量和函數)都會被移動到各自作用域的最頂端,這個過程被稱為提升。 具體例子看提升 下面兩個例子a會l...
摘要:函數提升在里有兩種方式創建函數,通過函數聲明和函數表達式。函數聲明用指定的參數來定義函數。提示不要在中進行函數聲明。問題輸出兩個都是用函數聲明的函數,將被提升到的局部作用域頂端。函數本身將作為函數聲明在全局范圍內提升。 作者關于提升的話題,總共有兩篇。(后來又有一個討論篇),再次搬過來。水平有限,如果翻譯的不準確請包涵,并去看原文。下面開始: 這是我之前的關于提升的文章,標題為《用le...
摘要:函數和變量相比,會被優先提升。這意味著函數會被提升到更靠前的位置。僅提升聲明,而不提升初始化。 JavaScript 函數高級——執行上下文與執行上下文棧(圖解+典型實例分析) 變量提升與函數提升 變量聲明提升 通過 var 定義(聲明)的變量,在定義語句之前就可以訪問到 值:undefined /* 面試題 : 輸出 undefined */ var a = 3 ...
摘要:要理解函數的提升行為,讓我們先解析什么是的提升。也就是說聲明提升了,賦值還留著原地,等待執行。聲明被提升,而包括函數表達式的賦值在內的賦值操作并不會提升,而是留在原地等待執行。 javaScript自上而下執行的順序受到很多新手和部分老手的共識,但是這其實并不完全正確,這涉及到js的編譯過程,這方面我們稍后會聊到,先考慮下面代碼: window.onload = function(){...
閱讀 2543·2023-04-26 00:56
閱讀 2000·2021-10-25 09:46
閱讀 1236·2019-10-29 15:13
閱讀 811·2019-08-30 15:54
閱讀 2190·2019-08-29 17:10
閱讀 2613·2019-08-29 15:43
閱讀 497·2019-08-29 15:28
閱讀 3022·2019-08-29 13:24