es6新特性的一点疑问

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 是否在参数处赋值,最后结果却不同,不太明白,求解惑

慕容3067478
浏览 657回答 1
1回答

GCT1015

这个应该是与严格模式有关use strict在非严格模式下,改变argument的值,会同时改变对应参数的值!在严格模式下不会这样。所以第一个输出21是对的,如果函数开始 加一句“use strict” 就输出 12 了。还没看 ES2015标准,只是看过点儿教程。下面说的不一定对。ES2015 标准规定,如果使用了默认参数,如c=3,在函数里就不能显示的写use strict。可能这个时候浏览器会自动进入严格模式吧。因为这样也不会不兼容以前的代码,毕竟默认参数是ES2015里面的,如果同时规定这样的函数是在严格模式下也是没有什么问题的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript