Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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 为什么可以';我有时会修改js中的函数变量吗?_Javascript - Fatal编程技术网

Javascript 为什么可以';我有时会修改js中的函数变量吗?

Javascript 为什么可以';我有时会修改js中的函数变量吗?,javascript,Javascript,我遇到了一个奇怪的问题,JS中的函数变量在某些情况下是不可写的 function a(){ a=1 console.log(a) } a() // output 1 (function a(){ a=1 console.log(a) })() // output a function 'a' var b=function a(){ a=1 console.log(a) } b() // output is also a function 'a' 从这个来源

我遇到了一个奇怪的问题,JS中的函数变量在某些情况下是不可写的

function a(){
  a=1
  console.log(a)
}
a() // output 1



(function a(){
  a=1
  console.log(a)
})() // output a function 'a'



var b=function a(){
  a=1
  console.log(a)
}
b()  // output is also a function 'a'
从这个来源:

您正在试验的情况与
函数的标识符/名称的不可变性/易变性相关,当它是函数表达式(标识符inmutable)和函数声明(标识符易变)时

在第一个示例中,有一个标识符为
a
mutable)的函数声明,因此您在方法内部覆盖它,并且输出是该覆盖的结果:

函数a()
{
console.log(“无覆盖:”,a);
a=1;//标识符'a'是可变的!
console.log(“覆盖后:”,a);
}
a()
.as控制台{背景色:黑色!重要;颜色:石灰;}

.作为控制台包装器{max height:100%!important;top:0;}
是的,当你尝试并误用一种编程语言时,事情会变得很奇怪:p我没有答案,但有一个问题-你为什么会想做这样的事情?@Jaromanda X嗯,我认为一切都应该是可以解释的,一个bug或设计。我只是想弄明白它的意思。如果我还没有投票决定答案的正确性,我会投票决定重新调整控制台。