形參與變量聲明和函數(shù)聲明同名(自測(cè)原型鏈)

題目來(lái)源:https://www.cnblogs.com/simonbaker/p/4237970.html
九道題目還是很有紀(jì)念價(jià)值的:
第一道:

a()
var a = c = function() {
    console.log(2)
}
a()

function a() {
    console.log(1)
}
a();
(function(b) {
    b(), c()
    var b = c = function a() {
        console.log(3)
    }
    b()
})(a)
c()

答案:1 2 2 2 2 3 3
解析:這個(gè)可以放在最后解析

var A = function() {}
A.prototype.n = 1;

var b = new A()

A.prototype = {
    n: 2,
    m: 3
}

var c = new A()
console.log(b.n, b.m, c.n, c.m)

答案:1 undefined 2 3
解析:在b被實(shí)例化的時(shí)候只是有A的變量表達(dá)式譬圣,給了A的原型對(duì)象一個(gè)n的屬性勇凭,此時(shí)m屬性為定義,因此b.m=undefined;類似原理,在c被實(shí)例化的時(shí)候脑蠕,A的原型對(duì)象被重新賦值,因此c.n=2,c.m=3

(function f() {
    function f() {
        return 1;
    }
    return f();

    function f() {
        return 2;
    }
})();

答案:2
解析:同名函數(shù)聲明舒萎,后面的函數(shù)聲明替換前面的函數(shù)聲明藐鹤,因此返回的f()是第二個(gè)聲明的函數(shù)

if (!a) {
    var a = 1;
}
console.log(a)

答案: 1
解析:這個(gè)是不是很簡(jiǎn)單,因?yàn)閖s沒有塊級(jí)作用域呀登疗。
拓展一下:

if (!(a in window)) {
    var a = 1;
}
console.log(a)

變量提升排截,因此首先a在window中滿足條件,因此賦值語(yǔ)句無(wú)法執(zhí)行辐益,因此最后打印出來(lái)是undefined断傲。
如果此時(shí)var變?yōu)閘et,那么無(wú)法打印a荷腊,因?yàn)閘et是可以形成塊級(jí)作用域呀艳悔,無(wú)法提升變量!E觥猜年!


image.png

5

function a() {}
var a;
console.log(typeof a)

答案:function
解析:只要記住一條就可以了,函數(shù)聲明 替換 變量聲明(記住不要把變量聲明理解為變量賦值哦)
6

(function(b) {
    console.log(b)
    var b = c = 2
    console.log(b)
})(1)

答案:1 2
解析:

(function (b) {
    var b = 1//所謂的傳入?yún)?shù)的過(guò)程就是聲明加賦值
    console.log(b)
    var b = c = 2
    console.log(b)
})(1)

7

(function(b) {
    console.log(b)
    var b = c = 2
    console.log(b)

    function b() {}
    console.log(b)
})(1)

答案:f b(){} 2 2
解析:換一種寫法就很清楚了

(function(b) {
    var b=1//參數(shù)定義擱在最前面
    function b() {}//函數(shù)聲明提升疾忍,不好意思乔外,把上面的覆蓋了
    console.log(b)//打印的就是函數(shù)嘍
    var b = c = 2
    console.log(b)//2
    console.log(b)//2
})(1)
var a = 10;

function fn() {
    console.log(1)
    var a = 100;
    console.log(a)
}
fn();

答案:1 100
解析:這個(gè)要是不知道,那就去看書吧
9

var a = 1

function c(a, b) {
    console.log(a)
    a = 2
    console.log(a)
}
c()

答案:undefined 2
解析:

var a = 1

function c(a, b) {
    console.log(a)
    a = 2
    console.log(a)
}
c()
console.log(a)

打印一下a就會(huì)發(fā)現(xiàn)是1呀一罩,所以參數(shù)如果和外部的變量同名杨幼,不要去糾結(jié),把參數(shù)當(dāng)做另一個(gè)字母表示就可以了

在講解題目的時(shí)候聂渊,先貼兩份代碼差购,

當(dāng)傳入?yún)?shù)為函數(shù)聲明的時(shí)候:

function f(a) {
    console.log(a);  // ? a() {  console.log('outer'); }
    var a = 2;
    console.log(a);  // 2
}
f(a);
function a() {
    console.log('outer');
}

換個(gè)清楚的:

function f(a) {
    function a() {
      console.log('outer');
    }
    console.log(a);  // ? a() {  console.log('outer'); }
    var a = 2;
    console.log(a);  // 2
}
f(a);
function a() {
    console.log('outer');
}

再來(lái)一個(gè)

function f(a) {
    console.log(a);  // ? a() { }
    var a = 2;
    function a() {}
    console.log(a);  // 2
}
f(a);
function a() {
    console.log('outer');
}

擦擦眼睛:

function f(a) {
function a() {
    console.log('outer');
}
    function a() {}
    console.log(a);  // ? a() { }
    var a = 2;
    console.log(a);  // 2
}
f(a);
function a() {
    console.log('outer');
}

第二類情況:傳入函數(shù)賦值的變量


function f(a) {
    console.log(a);  // function a() {}
    var a = 2;
    function a() {}
    console.log(a);  // 2
}
f(a);
var a = function b() {
    console.log('outer');
}

擦擦眼睛:

function f(a) {
    var a = function b() {
      console.log('outer');
    }
    function a() {}
    console.log(a);  // function a() {}
    var a = 2;
    console.log(a);  // 2
}
f(a);
var a = function b() {
    console.log('outer');
}

ok:核浴欲逃!再回頭看第一題是不是很好理解了
解析:

function a() {
    console.log(1)
} //函數(shù)聲明提升
a() //第一個(gè)a()打印出來(lái)就是1
var a = c = function () {
    console.log(2)
} //給a,c重新賦值
a() //第二個(gè)a執(zhí)行因此為2

a(); //第三個(gè)a執(zhí)行因此為2
(function (b) { //b其實(shí)就是a啊
    b(), c() //a沒有改變饼暑,當(dāng)然打印2呀稳析,c又不是參數(shù)洗做,c根據(jù)作用域鏈,發(fā)現(xiàn)了父級(jí)的作用域鏈彰居,打印的當(dāng)然也是2
    var b = c = function a() {
        console.log(3)
    } //記得賦值是從右往左賦值诚纸,而且c被重新賦值了,而且c還在window中
    b()
})(a)
c()
a()//2

完結(jié)3露琛F枧恰!
參考:https://www.cnblogs.com/simonbaker/p/4237970.html
https://www.cnblogs.com/aredleave/p/7596233.html
https://blog.csdn.net/weixin_34273046/article/details/87015464

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奴潘,一起剝皮案震驚了整個(gè)濱河市推捐,隨后出現(xiàn)的幾起案子喉誊,更是在濱河造成了極大的恐慌御蒲,老刑警劉巖腻格,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奈虾,居然都是意外死亡夺谁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門肉微,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)匾鸥,“玉大人,你說(shuō)我怎么就攤上這事碉纳∥鸶海” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵劳曹,是天一觀的道長(zhǎng)奴愉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)铁孵,這世上最難降的妖魔是什么锭硼? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蜕劝,結(jié)果婚禮上檀头,老公的妹妹穿的比我還像新娘。我一直安慰自己岖沛,他們只是感情好暑始,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著婴削,像睡著了一般蒋荚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上馆蠕,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天期升,我揣著相機(jī)與錄音,去河邊找鬼互躬。 笑死播赁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吼渡。 我是一名探鬼主播容为,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寺酪!你這毒婦竟也來(lái)了坎背?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤寄雀,失蹤者是張志新(化名)和其女友劉穎得滤,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盒犹,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懂更,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了急膀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沮协。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卓嫂,靈堂內(nèi)的尸體忽然破棺而出慷暂,到底是詐尸還是另有隱情,我是刑警寧澤晨雳,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布行瑞,位于F島的核電站,受9級(jí)特大地震影響悍募,放射性物質(zhì)發(fā)生泄漏蘑辑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一坠宴、第九天 我趴在偏房一處隱蔽的房頂上張望洋魂。 院中可真熱鬧,春花似錦喜鼓、人聲如沸副砍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)豁翎。三九已至,卻和暖如春隅忿,著一層夾襖步出監(jiān)牢的瞬間心剥,已是汗流浹背邦尊。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留优烧,地道東北人蝉揍。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像畦娄,于是被迫代替她去往敵國(guó)和親又沾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容