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

正常情况下let或者const声明的变量,是不能在重复声明的,即使是使用var也会报错,

eg:


let a = 123;

var a = 456;

错误提示:Uncaught SyntaxError: Identifier 'a' has already been declared


const 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


守着星空守着你
浏览 1330回答 4
4回答

守着一只汪

Ecmascript 标准就是这样定的。

海绵宝宝撒

//不报错var a = "123";var a = "321";//报错var a = "123";let a = "321";

FFIVE

function foo(x = 5, y = function () { x = 2; }) {    let x = 3;    // y();     console.log(x); } foo();即使函数不调用,结果也是一样的。函数参数变量是默认声明的,所以不可以使用let和const再次声明,其与第一种情况类似。关于let和const的说明可以参考阮一峰es6中的函数的扩展

莫回无

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中报错。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript