Javascript 为什么在使用生成器时const的值会发生变化?
我一直在探索Javascript生成器,这没有问题,但我怀疑生成器是如何改变“const”的值的。据我所知,如果一个变量被声明为const,它就不能被更改Javascript 为什么在使用生成器时const的值会发生变化?,javascript,ecmascript-6,generator,Javascript,Ecmascript 6,Generator,我一直在探索Javascript生成器,这没有问题,但我怀疑生成器是如何改变“const”的值的。据我所知,如果一个变量被声明为const,它就不能被更改 <script> function * numbers(i=0) { while(true){ yield ++i; } } const num = numbers(5); ///// no error console.log(num.next().value); console.
<script>
function * numbers(i=0)
{
while(true){
yield ++i;
}
}
const num = numbers(5); ///// no error
console.log(num.next().value);
console.log(num.next().value);
console.log(num.next().value);
</script>
如果变量声明为常量,则无法更改
<script>
function * numbers(i=0)
{
while(true){
yield ++i;
}
}
const num = numbers(5); ///// no error
console.log(num.next().value);
console.log(num.next().value);
console.log(num.next().value);
</script>
它所指的内容不能更改,它不控制函数的返回值或对象的易变性
在这种特定情况下,const num=numes(5)
将生成器对象分配给num
,现在num
将始终引用同一个生成器对象,但这就是const的控制结束的地方-只要您开始挖掘num
的属性(next()
方法)您已经保留了初始引用,现在您正在使用另一个引用(num
对象上的next
方法),该方法返回另一个具有属性值的完全独立的对象,即与原始对象相隔三个引用
即使放弃所有中间对象,const仍然无法控制函数的返回值:
设i=0;
常量foo=()=>i++;
foo();//0
foo();//1.
foo();//2.
const是关于赋值的,它只防止以下情况:
constfoo=()=>i++;
常量foo=()=>0;
//SyntaxError:已声明标识符“foo”
生成器在这方面没有什么不同,它们只是有一些特殊的内部流控制。因为生成器函数返回一个generator
对象,所以即使变量是用const定义的,对象的内部值也可以更改。您也可以读取这个num
不会更改为其他值吗?当然,调用.next()
可以在连续调用中返回不同的内容。