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

資訊專欄INFORMATION COLUMN

函數(shù)聲明和聲明變量同時(shí)存在,提升的規(guī)則是什么?

dockerclub / 514人閱讀

摘要:若輸出為則證明函數(shù)聲明位于變量聲明之前若為說(shuō)明相反。根據(jù)實(shí)驗(yàn)結(jié)果,我們最后得出的排序結(jié)果是總結(jié)和反思函數(shù)聲明會(huì)提升到變量聲明之前。正確結(jié)論是優(yōu)先級(jí)比高,無(wú)論在其前后,都會(huì)覆蓋掉同名的聲明。

這是一道新鮮的剛剛出爐的題目,目前只有2個(gè)回答,處于未解決狀態(tài)。
題目鏈接在這:https://segmentfault.com/q/10...
好奇心爆棚的我聽著電音思考了一發(fā),應(yīng)該沒(méi)錯(cuò)吧。

var a=1;
foo();
function foo(){};

首先,我們可以把它分為4塊內(nèi)容

var a ;
a =1;
foo();
function foo();

我們想知道提升后排序是什么形式?
目前已知條件是,變量聲明會(huì)提升到變量賦值之前,所以我們可以先將變量聲明放到前兩位,暫時(shí)不管其內(nèi)部順序:

var a ;
function foo(){};
a=1;
foo();

接下來(lái)我們來(lái)分別確定聲明和賦值模塊的內(nèi)部排序。
為了進(jìn)行實(shí)驗(yàn),我們對(duì)foo函數(shù)進(jìn)行擴(kuò)充,所以現(xiàn)在的排序?yàn)椋?/p>

var a;
function foo(){console.log(a+1)};
a=1;
foo();

先不要管為什么這么改,我們繼續(xù)實(shí)驗(yàn),實(shí)驗(yàn)過(guò)程中會(huì)理解。
為了便于理解,實(shí)驗(yàn)分兩次進(jìn)行。
首先:我們對(duì)變量聲明模塊進(jìn)行實(shí)驗(yàn)。

var a=1;
console.log(foo);//若輸出為function foo(){}則證明函數(shù)聲明位于變量聲明之前;若為undefined,說(shuō)明相反。
foo();
function foo(){console.log(a+1)};

然后:我們對(duì)變量賦值模塊進(jìn)行實(shí)驗(yàn)。

var a=1;
foo();//若輸出為undefined1,則證明foo()在a=1之前;若輸出為2,則說(shuō)明a=1在foo()之前。
function foo(){console.log(a+1)};

下面來(lái)進(jìn)行實(shí)驗(yàn):

var a=1;
console.log(foo);//若輸出為function foo(){}則證明函數(shù)聲明位于變量聲明之前;若為undefined,說(shuō)明相反。
foo();
function foo(){console.log(a+1)};

VM1099:2 function foo(){console.log(a+1)}
VM1099:4 2

根據(jù)實(shí)驗(yàn)結(jié)果,我們最后得出的排序結(jié)果是:

function foo(){};
var a;
a=1;
foo();

總結(jié)和反思:

1.函數(shù)聲明會(huì)提升到變量聲明之前。

2.提升只針對(duì)的是聲明部分,即出現(xiàn)var funtion等的地方,后續(xù)的賦值和函數(shù)調(diào)用按照當(dāng)前默認(rèn)順序依次執(zhí)行。
前端菜鳥一只,若有不對(duì)的地方請(qǐng)及時(shí)指正!
期待與您交流!

------更新------2018.5.22------
結(jié)論是錯(cuò)誤的,原因是console.log()是異步函數(shù),導(dǎo)致實(shí)驗(yàn)結(jié)果不準(zhǔn)確。
正確結(jié)論是:function優(yōu)先級(jí)比var高,無(wú)論在其前后,都會(huì)覆蓋掉同名的var聲明。

console.log(typeof foo);
var foo = "foo";
function foo(){}

輸出:function

console.log(typeof foo);
function foo(){}
var foo = "foo";

輸出:function

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/83015.html

相關(guān)文章

  • 譯:用let const 來(lái)指導(dǎo)JavaScript 變量提升

    摘要:最近在上看到一篇關(guān)于變量提升的文章,原文在此。對(duì)于剛?cè)腴T的開發(fā)者時(shí)常難以理解變量方法提升的獨(dú)特行為。接下來(lái)我們要談?wù)?,,聲明,那么先了解變量提升就顯得更為重要了。在進(jìn)入作用域和不能訪問(wèn)的這段時(shí)間,我們稱為暫時(shí)性死區(qū)。 showImg(https://segmentfault.com/img/bV0Nsd?w=800&h=450); 最近在Medium上看到一篇關(guān)于變量提升的文章,原文在...

    sanyang 評(píng)論0 收藏0
  • 弄懂JavaScript作用域閉包

    摘要:關(guān)于本書,我會(huì)寫好幾篇讀書筆記用以記錄那些讓我恍然大悟的瞬間,本文是第一篇弄懂的作用域和閉包。作用域也可以看做是一套依據(jù)名稱查找變量的規(guī)則。聲明實(shí)際上是根據(jù)你傳遞給它的對(duì)象憑空創(chuàng)建了一個(gè)全新的詞法作用域。 《你不知道的JavaScript》真的是一本好書,閱讀這本書,我有多次哦,原來(lái)是這樣的感覺(jué),以前自以為理解了(其實(shí)并非真的理解)的概念,這一次真的理解得更加透徹了。關(guān)于本書,我會(huì)寫好...

    everfly 評(píng)論0 收藏0
  • ES6學(xué)習(xí) 第一章 let const 命令

    摘要:外層作用域不報(bào)錯(cuò)正常輸出塊級(jí)作用域與函數(shù)聲明規(guī)定,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級(jí)作用域聲明。規(guī)定,塊級(jí)作用域之中,函數(shù)聲明語(yǔ)句的行為類似于,在塊級(jí)作用域之外不可引用。同時(shí),函數(shù)聲明還會(huì)提升到所在的塊級(jí)作用域的頭部。 前言:最近開始看阮一峰老師的《ECMAScript 6 入門》(以下簡(jiǎn)稱原...

    番茄西紅柿 評(píng)論0 收藏2637
  • ES5ES6作用域詳解

    摘要:允許在塊級(jí)作用域內(nèi)聲明函數(shù)。上面代碼中,存在全局變量,但是塊級(jí)作用域內(nèi)又聲明了一個(gè)局部變量,導(dǎo)致后者綁定這個(gè)塊級(jí)作用域,所以在聲明變量前,對(duì)賦值會(huì)報(bào)錯(cuò)。 ES5的作用域 變量起作用的范圍,js中能創(chuàng)建作用域的只能是函數(shù) { let a = 1; var b = 2; } console.log(a); // a is not defined console.log(b); //...

    Dr_Noooo 評(píng)論0 收藏0
  • ES2015系列--塊級(jí)作用域

    摘要:在的閉包中,閉包函數(shù)能夠訪問(wèn)到包庇函數(shù)中的變量,這些閉包函數(shù)能夠訪問(wèn)到的變量也因此被稱為自由變量。在之前最常見的兩種作用域,全局作用局和函數(shù)作用域局部作用域。 關(guān)于文章討論請(qǐng)?jiān)L問(wèn):https://github.com/Jocs/jocs.... 當(dāng)Brendan Eich在1995年設(shè)計(jì)JavaScript第一個(gè)版本的時(shí)候,考慮的不是很周到,以至于最初版本的JavaScript有很多不...

    darkbug 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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