慕容3067478
2018-10-18 11:15:13
function sidEffecting(ary) { ary[0] = ary[2];}function bar(a,b,c) { // c無賦值 c = 10 sidEffecting(arguments); return a + b + c;}bar(1,1,1)function sidEffecting(ary) { ary[0] = ary[2];}function bar(a,b,c=3) { // c=3 c = 10 sidEffecting(arguments); return a + b + c;}bar(1,1,1)兩段代碼,差別只是 c 是否在參數(shù)處賦值,最后結(jié)果卻不同,不太明白,求解惑
1 回答

GCT1015
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊
這個(gè)應(yīng)該是與嚴(yán)格模式有關(guān)use strict
在非嚴(yán)格模式下,改變argument
的值,會(huì)同時(shí)改變對(duì)應(yīng)參數(shù)的值!
在嚴(yán)格模式下不會(huì)這樣。
所以第一個(gè)輸出21
是對(duì)的,如果函數(shù)開始 加一句“use strict”
就輸出 12
了。
還沒看 ES2015
標(biāo)準(zhǔn),只是看過點(diǎn)兒教程。下面說的不一定對(duì)。
ES2015 標(biāo)準(zhǔn)規(guī)定,如果使用了默認(rèn)參數(shù),如c=3
,在函數(shù)里就不能顯示的寫use strict
。可能這個(gè)時(shí)候?yàn)g覽器會(huì)自動(dòng)進(jìn)入嚴(yán)格模式吧。因?yàn)檫@樣也不會(huì)不兼容以前的代碼,畢竟默認(rèn)參數(shù)是ES2015里面的,如果同時(shí)規(guī)定這樣的函數(shù)是在嚴(yán)格模式下也是沒有什么問題的。
添加回答
舉報(bào)
0/150
提交
取消