iT邦幫忙

0

執行順序問題

gameking93 3 月前2726 瀏覽

各位前輩您好,想請問以下程式碼問題,

為何先aaa()後再去console.log('b') 得到的結果會只有b 而沒有印出'123'

function aaa(){
return '123' ;
}
aaa();
console.log('b');
//b

---------------------------------

function aaa(){
return '123' ;
}

console.log('b');
aaa();
// b
// "123"
看更多先前的討論...收起先前的討論...
kingc iT邦新手 5 級 ‧ 3 月前 檢舉
我猜你是在Chrome(或者其他browser)的Console终端运行了你的这两段代码, Console终端的一个特殊性在于它是一个REPL环境,会把用户输入执行的整个语句block当做一个expression, 如果这个语句block的最后一个statement没有返回值,则REPL会认为返回了一个空值(Chrome里是undefined).
因此这样就能解释你观察到的执行结果了:
aaa();
console.log('b');
//在Chrome的Console上看到的是:
b //这是输出的结果
undefined //这是返回的结果, 注意在Console的界面里显示前面会带一个箭头图标
解释: 对aaa()的call并没有print出任何值,所以它return回的"123"被默默丢掉了, 只有被执行的console.log()使'b'被打印出来,
而最后被执行的console.log()函数本身是不返回任何值得,因此整个block返回了个undefined.

然后来看下面的执行语句block和结果:
console.log('b');
aaa();

b //这个不用解释
"123" //这其实是整个block的返回值,取的是把最后的语句aaa()当做expression返回的值,注意在Console的界面里显示前面也会带一个箭头图标.
Samと可樂快跑 iT邦研究生 4 級 ‧ 3 月前 檢舉
@kingc 他的問題沒有你講的這一大堆那麼複雜吧!
就單純只是個返回值他忘記加上console.log()而已……
kingc iT邦新手 5 級 ‧ 3 月前 檢舉
好像并不是,注意看最后这个调用的输出,同样的aaa函数调用是有"输出"内容的:
console.log('b');
aaa();
// b
// "123"
Samと可樂快跑 iT邦研究生 4 級 ‧ 3 月前 檢舉
「好像」?所以你沒有實際跑過他的code對不對?
fillano iT邦超人 1 級 ‧ 3 月前 檢舉
在console跑跟樓主說的情況也不完全一樣。console.log('b')應該會輸出
b
undefined

b是console輸出的結果,所以不帶「literal」的記號,例如'b'
至於function aaa(){return '123'},在node.js的repl console會輸出:

'123'

在chrome的console則輸出:

"123"

另外,不知道從哪個版本起,在chrome執行console.log,結果會帶「時間」,更像log了
Samと可樂快跑 iT邦研究生 4 級 ‧ 3 月前 檢舉
可我看到的是只有aaa()…
而不是console.log(aaa());
fillano iT邦超人 1 級 ‧ 3 月前 檢舉
瀏覽器的developer console會印出函數返回值...但是樓主講的實在複製不出來XD
Samと可樂快跑 iT邦研究生 4 級 ‧ 3 月前 檢舉
@fillano 嗯!原來如此。因為我是直接寫在html的頁面看console
weiclin iT邦高手 7 級 ‧ 3 月前 檢舉
推一下 kingc
Samと可樂快跑 iT邦研究生 4 級 ‧ 3 月前 檢舉
推一下kingc 是我太習慣用html中寫js來看東西了。

2 個回答

0
Samと可樂快跑
iT邦研究生 4 級 ‧ 3 月前

你…return了……
但是你………忘記輸出顯示了!

gameking93 iT邦新手 5 級 ‧ 3 月前 檢舉

了解

竟然犯了這麼低級的錯誤.....

真是抱歉/images/emoticon/emoticon02.gif

0
nacoyow
iT邦新手 3 級 ‧ 3 月前

aaa(); 改成 echo aaa();
就可以看到結果了... ^^...

Samと可樂快跑 iT邦研究生 4 級 ‧ 3 月前 檢舉

他不是php啊

我要發表回答

立即登入回答