无法使用let定义与函数参数名称相同的变量

时间:2018-09-18 07:00:25

标签: javascript

很长一段时间后,我将返回javaScript,并且我刚刚了解了ES6的新功能。这是第一个疑问。

尽管我了解到let变量不能在遇到这种情况的同一块范围内被声明两次:

    function tell(story){
       let story = {
          story
        };
     }

这给了我一个错误: Uncaught SyntaxError: Identifier 'story' has already been declared

使用var可以正常工作。

1)这是否意味着我将不得不使用let(甚至是const)来声明一个具有与函数参数不同名称的变量?就变量命名而言,这可能非常烦人。

为了保持相同的名字,我这么做了:

function tell(story){
     story = {
        story
     };
}

2)在这种情况下,变量story仅属于函数tell的范围吗?

1 个答案:

答案 0 :(得分:5)

  

使用var可以正常工作。

不是真的,var被完全忽略了,您实际上将拥有:

function tell(story){
   story = {
      story
   };
 }

如果这是您想要的,只需完全关闭var(和let)(如上所述)。

来自let的错误解决了这个陷阱,您认为您已经在其中创建了(新)变量,但还没有。您不能使用let(或const)来声明已经在相同范围内声明的变量(作为变量或参数,这与变量几乎是同一件事)

  

1)这是否意味着我将不得不使用let(甚至是const)来声明一个具有与函数参数不同名称的变量?就变量命名而言,这可能非常烦人。

由您决定。为了继续做您正在做的事情,只需完全省略varletconst,因为var根本没有任何作用,您要分配给参数,而不是新变量。或继续做您正在做的事情(使用var),但要知道这是一种误导。或者使用letconst使用不同的名称-许多人认为更改参数的值不是最佳实践(个人而言,我不是其中之一,但是...)并且他们会建议使用其他变量。

  

2)在这种情况下,变量story将完全属于函数tell的范围吗?

是的,您要分配给story本地的参数tell