摘要:變量聲明提升變量作用域指變量起作用的范圍。全局變量在全局都擁有定義而局部變量只能在函數(shù)內(nèi)有效。在函數(shù)體內(nèi),同名的局部變量或者參數(shù)的優(yōu)先級會(huì)高于全局變量。
瀏覽器引擎會(huì)在解釋javascript代碼之前首先對其進(jìn)行編譯。編譯階段中的一部分工作就是找到所有的聲明,并用合適的作用域?qū)⑺鼈冴P(guān)聯(lián)起來,包括變量和函數(shù)在內(nèi)的所有聲明都會(huì)在任何代碼被執(zhí)行前首先被處理,置于作用域前端。
變量聲明提升變量作用域指變量起作用的范圍。變量分為全局變量和局部變量。全局變量在全局都擁有定義;而局部變量只能在函數(shù)內(nèi)有效。
在函數(shù)體內(nèi),同名的局部變量或者參數(shù)的優(yōu)先級會(huì)高于全局變量。也就是說,如果函數(shù)內(nèi)存在和全局變量同名的局部變量或者參數(shù),那么全局變量將會(huì)被局部變量覆蓋。
es6前是沒有塊級作用域的,通過聲明提升變量無論在哪里聲明,都會(huì)有定義,只有定義沒有值是undefined
console.log(a); var a=1; console.log(a);
上面函數(shù)執(zhí)行時(shí)類似如下過程
var a; console.log(a); a=1; console.log(a);函數(shù)聲明提升
函數(shù)的創(chuàng)建方式
函數(shù)聲明 函數(shù)表達(dá)式
函數(shù)聲明 function handleClick(){}
函數(shù)表達(dá)式 var a=function(){}
兩種方式不同點(diǎn) 函數(shù)聲明有有聲明的提升,表達(dá)式只有定義以后才能使用
下面例子可以看出
console.log(a) function a(){ console.log(1) } var a=function(){ console.log(2) } console.log(a);
當(dāng)函數(shù)和變量的聲明,前者優(yōu)先級更高
"use strict"; console.log(a); // fn a function a (){ } var a=1; console.log(a); // a 1
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/88565.html
摘要:對于大多數(shù)開發(fā)者來說,變量提升可以說是一個(gè)非常常見的問題,但是可能很多人對其不是特別的了解。如果說擁有和一樣的變量提升效果的話,那么應(yīng)該是輸出。而和它們的變量提升的效果是一樣的,也都存在著臨死性死區(qū)的概念。 對于大多數(shù)js開發(fā)者來說,變量提升可以說是一個(gè)非常常見的問題,但是可能很多人對其不是特別的了解。所以在此,我想來講一講。 先從一個(gè)簡單的例子來入門: a = 2; var a; ...
摘要:所謂變量提升,提升就是為了事先聲明變量。變量提升之后,但其賦值還是留在原本的位置等運(yùn)行到了之后動(dòng)態(tài)賦值,而函數(shù)提升之后直接相當(dāng)于在代碼里抽空了。搞明白這個(gè)例子也就搞懂了作用域中變量和函數(shù)是怎么提升的。 問題 showImg(https://segmentfault.com/img/bVJ614?w=222&h=165); 在這個(gè)例子中它應(yīng)該輸出什么?輸出的結(jié)果是6。 showImg(h...
摘要:要理解函數(shù)的提升行為,讓我們先解析什么是的提升。也就是說聲明提升了,賦值還留著原地,等待執(zhí)行。聲明被提升,而包括函數(shù)表達(dá)式的賦值在內(nèi)的賦值操作并不會(huì)提升,而是留在原地等待執(zhí)行。 javaScript自上而下執(zhí)行的順序受到很多新手和部分老手的共識,但是這其實(shí)并不完全正確,這涉及到j(luò)s的編譯過程,這方面我們稍后會(huì)聊到,先考慮下面代碼: window.onload = function(){...
摘要:在編譯階段,函數(shù)聲明和變量聲明都會(huì)被先處理置于執(zhí)行環(huán)境的頂部,且賦值會(huì)被留在原地,這個(gè)過程稱之為提升。另外函數(shù)聲明提升不會(huì)被變量聲明覆蓋,但會(huì)被變量賦值覆蓋。 看到相關(guān)的前端面試題,總結(jié)一下知識點(diǎn),大神請飄過。JS在編譯階段,函數(shù)聲明和變量聲明都會(huì)被先處理置于執(zhí)行環(huán)境的頂部,且賦值會(huì)被留在原地,這個(gè)過程稱之為提升。舉個(gè)簡單例子: console.log(i); var i = 1; f...
摘要:不同的是函數(shù)體并不會(huì)再被提升至函數(shù)作用域頭部,而僅會(huì)被提升到塊級作用域頭部避免全局變量在計(jì)算機(jī)編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與實(shí)踐技巧系列文章。本文詳細(xì)討論了 JavaScript 中作用域、執(zhí)行上下文、不同作用域下變量提升與函數(shù)提升的表現(xiàn)、頂層對象以及如何避免創(chuàng)建...
摘要:代碼在執(zhí)行之前會(huì)先全局中變量提升函數(shù)聲明。函數(shù)的執(zhí)行上下文,也就是在這個(gè)函數(shù)范圍內(nèi)找到函數(shù)執(zhí)行上下文中函數(shù)范圍內(nèi),所有用聲明的變量。函數(shù)執(zhí)行時(shí),按照執(zhí)行位置查找變量作用域只會(huì)向上查找。下一回變量作用域與閉包 上一章:JS的數(shù)據(jù)類型 傳送門:https://segmentfault.com/a/11... 好!話不多少,我們就開始吧。對變量提升和函數(shù)聲明的理解,能讓你更清楚容易的理解,...
閱讀 1601·2023-04-26 02:03
閱讀 4859·2021-11-22 13:53
閱讀 4740·2021-09-09 11:40
閱讀 3904·2021-09-09 09:34
閱讀 2181·2019-08-30 13:18
閱讀 3587·2019-08-30 11:25
閱讀 3341·2019-08-26 14:06
閱讀 2599·2019-08-26 13:52