第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

js 局部變量和全局變量

js 局部變量和全局變量

牛魔王的故事 2019-03-14 18:15:17
function f(shouldInitialize: boolean) {    if (shouldInitialize) {        var x = 10;    }    return x;}f(true);  // returns '10'f(false); // returns 'undefined'此處的 x雖然在if語句中 但是也是在f函數中作為局部變量 為什么 false返回的是undefined呢 ?不是應該也返回10嗎
查看完整描述

10 回答

?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

function f(params){

        var x;

        if(params){

            x = 10; //var x=10; 變量提升到最頂層

        }

        return x;

    }

    f(false);//undefined 

非常感謝熱心小伙伴的指點, 樓上說的變量提升就是這個意思吧 這應該就是程序走的步驟


查看完整回答
反對 回復 2019-04-09
?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

這是作用域的問題。
用了var關鍵字,變量作用域提升,true的時候,if外面可見x,false的時候不走這里,外面看不到。

你可以試下let或者const,即使你true,直接報錯x沒定義。


查看完整回答
反對 回復 2019-04-09
?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

這個問題,var是函數作用域也就是function級別。{}限制不了它的域,存在變量提示。
也就是js解釋器在解釋的時候第一遍會遍歷function里的變量做預聲明,然后再按行解析。
這道題,程序進入函數后:

  1. 先聲明x,但是不賦值,為undefined

  2. 然后解析if,發(fā)現(xiàn)為false,那么var x = 10; 這句不執(zhí)行,直接執(zhí)行 return x。然后就是undefined


你可以對比下面兩段代碼

function f(shouldInitialize = true) {

    console.log(x);

    if (shouldInitialize) {

        var x = 10;

    }


    return x;

}

f(false); // returns 'undefined'

function f(shouldInitialize = true) {

    console.log(x);

    if (shouldInitialize) {

        let x = 10;

    }


    return x;

}

f(false); // let 作用域是塊也就是{},解析階段會報錯


查看完整回答
反對 回復 2019-04-09
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

你這個幸好是var命中了js的awful parts
如果你試試const let,會直接報ReferenceError。

查看完整回答
反對 回復 2019-04-09
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

兄弟你哪個實參如果接收了false的話說明false為0 就不會走if語句內的結構了 返回的結果自然就是undefined了


查看完整回答
反對 回復 2019-04-09
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

該說的樓上都說了,我只是翻譯一下。


function f(shouldInitialize: boolean) {

    var x;//這就是所謂的聲明提升

    if (shouldInitialize) {

        x = 10;

    }


    return x;

}


f(true);  // returns '10'

f(false); // returns 'undefined'


查看完整回答
反對 回復 2019-04-09
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

(1)傳入參數為true時,if語句執(zhí)行,存在變量提升情況。此時,f()函數如下。


function f(shouldInitialize: boolean) {

    var x;  //變量提升

    if (shouldInitialize) {

       x = 10;

    }

    return x;

}


f(true);  // returns '10'

(2)傳入參數為false時,if語句對應的賦值語句沒有執(zhí)行,但依舊存在var變量聲明和變量提升。此時,f()函數如下。


//傳入參數為false時

function f(shouldInitialize: boolean) {

    var x;  //變量提升

    return x;

}


f(false);  // returns 'undefined'


查看完整回答
反對 回復 2019-04-09
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

變量提升,盡量少用var,用let就明白咋回事了


查看完整回答
反對 回復 2019-04-09
?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

你的第一個問題:返回的是undefined呢?看到問題第一反應是用變量提升來幫你解答,但是看到第二個問題,你竟然問:不是應該也返回10嗎?突然猶豫要不要解答第一個問題了。


查看完整回答
反對 回復 2019-04-09
  • 10 回答
  • 0 關注
  • 665 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號