为了账号安全,请及时绑定邮箱和手机立即绑定

参数变量是默认声明的,所以不能用let或const再次声明,但是为什么可以使用var声明?

参数变量是默认声明的,所以不能用let或const再次声明,但是为什么可以使用var声明?

守着星空守着你 2019-03-19 17:13:11
正常情况下let或者const声明的变量,是不能在重复声明的,即使是使用var也会报错,eg:let a = 123;var a = 456;错误提示:Uncaught SyntaxError: Identifier 'a' has already been declaredconst C = 123;var C = 456;错误提示:Uncaught SyntaxError: Identifier 'a' has already been declared参数变量是默认声明的,所以不能用let或const再次声明,但是为什么可以使用var声明? 这里的默认声明是指什么?eg:函数内使用var声明参数function foo(x = 5, y = function() { x = 2; }) {  var x = 3;  y();  console.log(x);}foo()     // 不会报错函数内使用let声明参数function foo(x = 5, y = function() { x = 2; }) {  let x = 3;  y();  console.log(x);}foo()     // 会报错 Uncaught SyntaxError: Identifier 'x' has already been declared
查看完整描述

4 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

Ecmascript 标准就是这样定的。


查看完整回答
反对 回复 2019-03-25
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

//不报错

var a = "123";

var a = "321";


//报错

var a = "123";

let a = "321";


查看完整回答
反对 回复 2019-03-25
?
FFIVE

TA贡献1797条经验 获得超6个赞

function foo(x = 5, y = function () { x = 2; }) {    let x = 3;    // y();
    console.log(x);
}
foo();

即使函数不调用,结果也是一样的。函数参数变量是默认声明的,所以不可以使用let和const再次声明,其与第一种情况类似。
关于let和const的说明可以参考阮一峰es6中的函数的扩展


查看完整回答
反对 回复 2019-03-25
?
莫回无

TA贡献1865条经验 获得超7个赞

function foo(x = 5, y = function() { x = 2; }) {

  let x = 3;
  y();
  console.log(x);}
foo()

这里报错,我感觉应该是函数声明的提升,所以应该他是先执行了y(); 所以已经注册了一个x,后面再执行let x=3的时候 ,就会报错。不知道 我的理解有没有错。 他x的赋值应该是 5 2 最后才是let x= 3中报错。


查看完整回答
反对 回复 2019-03-25
  • 4 回答
  • 0 关注
  • 1329 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信