将ECMAScript 6 const作为函数参数传递

Bug*_*nny 5 const function argument-passing ecmascript-6

我最近一直在阅读关于ES6的很多内容,并决定试一试(使用Babel).我与新变量的声明有点困惑letconst.

我明白了范围的不同之处var; 这const是对值的永久引用(而不是一个常量值本身!).

:如果我将const变量传递给函数调用怎么办?接收功能是否能够更改值/参考?为什么?为什么不?

小智 5

被传递给函数参数的语义是完全独立的该参数是如何申报(无论是否使用var,letconst).传递给函数的只是一些价值.接收函数无法了解值的推导方式和位置,包括(如果它是变量)如何声明该变量.它只是看到传入的值.新的letconst关键字与此行为无关.

考虑到数组或对象的价值,可能会操纵该数组或对象,这是一些混淆的根源.所以我可以做到以下几点:

const a = {};
a.x = 1;
Run Code Online (Sandbox Code Playgroud)

const在上面使a自己成为其范围内的常量,因此它不能被重新声明或重新分配,但它决不会阻止内部结构a被改变,在这种情况下通过添加属性x.

同样,在参数传递上下文中:

function func(obj) { obj.x = 1; }

const a = {};
func(a);
Run Code Online (Sandbox Code Playgroud)

这里,func接收到的值a作为obj,但该值也可以访问/改变对象的内部结构.

可能感兴趣:如何在JavaScript中使函数参数保持不变?.