Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用let定义与函数同名的变量';s参数_Javascript - Fatal编程技术网

Javascript 无法使用let定义与函数同名的变量';s参数

Javascript 无法使用let定义与函数同名的变量';s参数,javascript,Javascript,在长期缺席之后,我将回到javaScript,我刚刚了解了ES6的新特性。这是第一个疑问 虽然我知道在同一块范围内不能两次声明let变量,但我遇到了这种情况: function tell(story){ let story = { story }; } 这给了我一个错误: 未捕获的语法错误:已声明标识符“story” 使用var这很好 1) 这是否意味着我必须使用let(甚至const)声明一个具有不同函数参数名称的变量?就变

在长期缺席之后,我将回到javaScript,我刚刚了解了ES6的新特性。这是第一个疑问

虽然我知道在同一块范围内不能两次声明
let
变量,但我遇到了这种情况:

    function tell(story){
       let story = {
          story
        };
     }
这给了我一个错误:
未捕获的语法错误:已声明标识符“story”

使用
var
这很好

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

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

function tell(story){
     story = {
        story
     };
}
2) 在这种情况下,变量
story
将专门属于函数
tell

使用
var
这很好

不完全如此,
var
被完全忽略,您实际上会:

function tell(story){
   story = {
      story
   };
 }
如果这是您想要的,只需完全关闭
var
(和
let
)即可(如上所述)

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

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

这取决于你。要继续执行您正在执行的操作,只需完全取消
var
let
const
,因为同样地,
var
没有任何效果,您是在分配参数,而不是新变量。或者继续做你正在做的事情(使用
var
),但要明白这是误导。或者对
let
const
使用不同的名称-许多人认为更改参数值不是最佳做法(我个人不是其中之一,但…),他们建议使用不同的变量

2) 在这种情况下,变量
story
将专门属于函数
tell


是的,您正在指定参数
story
,这是
tell

的本地参数,因为这样,当您稍后在
tell
函数中引用
story
时,解释器如何知道您试图引用的
story
的哪个绑定?您知道
做什么吗?在这里,您试图声明一个已经声明的变量。。。