成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js聲明提升

SexySix / 2458人閱讀

摘要:變量聲明提升變量作用域指變量起作用的范圍。全局變量在全局都擁有定義而局部變量只能在函數(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

相關(guān)文章

  • 5分鐘深入了解js變量提升

    摘要:對于大多數(shù)開發(fā)者來說,變量提升可以說是一個(gè)非常常見的問題,但是可能很多人對其不是特別的了解。如果說擁有和一樣的變量提升效果的話,那么應(yīng)該是輸出。而和它們的變量提升的效果是一樣的,也都存在著臨死性死區(qū)的概念。 對于大多數(shù)js開發(fā)者來說,變量提升可以說是一個(gè)非常常見的問題,但是可能很多人對其不是特別的了解。所以在此,我想來講一講。 先從一個(gè)簡單的例子來入門: a = 2; var a; ...

    tinysun1234 評論0 收藏0
  • js變量提升與函數(shù)提升的機(jī)制

    摘要:所謂變量提升,提升就是為了事先聲明變量。變量提升之后,但其賦值還是留在原本的位置等運(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...

    fasss 評論0 收藏0
  • 深入理解 js 聲明提升( 尾部有總結(jié) 和 面試題解析 )

    摘要:要理解函數(shù)的提升行為,讓我們先解析什么是的提升。也就是說聲明提升了,賦值還留著原地,等待執(zhí)行。聲明被提升,而包括函數(shù)表達(dá)式的賦值在內(nèi)的賦值操作并不會(huì)提升,而是留在原地等待執(zhí)行。 javaScript自上而下執(zhí)行的順序受到很多新手和部分老手的共識,但是這其實(shí)并不完全正確,這涉及到j(luò)s的編譯過程,這方面我們稍后會(huì)聊到,先考慮下面代碼: window.onload = function(){...

    curlyCheng 評論0 收藏0
  • js函數(shù)聲明提升與變量提升

    摘要:在編譯階段,函數(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...

    Rindia 評論0 收藏0
  • ES6 變量作用域與提升:變量的生命周期詳解

    摘要:不同的是函數(shù)體并不會(huì)再被提升至函數(shù)作用域頭部,而僅會(huì)被提升到塊級作用域頭部避免全局變量在計(jì)算機(jī)編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與實(shí)踐技巧系列文章。本文詳細(xì)討論了 JavaScript 中作用域、執(zhí)行上下文、不同作用域下變量提升與函數(shù)提升的表現(xiàn)、頂層對象以及如何避免創(chuàng)建...

    lmxdawn 評論0 收藏0
  • 原型模式故事鏈(4)--JS執(zhí)行上下文、變量提升、函數(shù)聲明

    摘要:代碼在執(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ù)聲明的理解,能讓你更清楚容易的理解,...

    melody_lql 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<