Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 声明变量的差异_Javascript - Fatal编程技术网

Javascript 声明变量的差异

Javascript 声明变量的差异,javascript,Javascript,请让我知道下面两个代码之间的区别 var a = 1; function b() { a = 10; return; } b(); console.log(a); 这在控制台中打印10 而下面的代码在控制台中打印1 var a = 1; function b() { var a = 10; return; function a() {} } b(); console.log(a); 谢谢你的帮助。这是一个范围的问题。在第一个函数中,a仅在函数b

请让我知道下面两个代码之间的区别

var a = 1; 
function b() { 
  a = 10; 
  return; 
} 
b(); 
console.log(a);
这在控制台中打印10

而下面的代码在控制台中打印1

var a = 1; 
function b() { 
  var a = 10; 
  return; 
  function a() {} 
} 
b(); 
console.log(a); 

谢谢你的帮助。

这是一个范围的问题。在第一个函数中,a仅在函数b之外声明,因此当您编辑函数b内部的a时,您引用的是外部a

在第二个代码段中,您在函数内重新声明了变量a,因此,当您在b函数内编辑变量时,您引用的是最新的变量,而外部a变量未被触及。

您在函数内的第二个代码中声明了a,因此变量a的作用域可用性仅持续到函数执行为止


一旦我们从函数返回,局部变量a就不再存在,因此外部全局变量a的值将被打印。

第一个示例非常简单:您声明了一个a变量,b函数将其关闭。所以b将a设为10

你的第二个例子是故意的复杂和混乱。您声明了一个b关闭的a变量,但随后在b内部用a变量对其进行阴影处理。更糟糕的是,还有一个a的函数声明也在b的范围内。var胜过函数声明,因为函数声明是在执行var语句之前处理的。外部a完全不受b的影响,因此末尾的console.log记录1

这更容易用分类图来描述:

var a = 1;            // <== The declaration `b` closes over
function b() {
  var a = 10;         // <== The inner `a` variable
  return;             // <== Returns from `b`
  function a() {}     // <=== Declaration that was processed immediately
                      // upon entering `b` (the `return` doesn't affect it
                      // at all), but which is then superceded by `var a`
} 
b(); 
console.log(a);       // Logs 1

当您使用var时,它的作用域将是其函数的局部。
如果没有var,它将是一个全局函数。

在第一个代码中,有一个全局变量“a”,可以被任何函数修改,这种更改将是永久的

但在第二个代码中,有两个“a”变量。让我们称之为ag全球和al本地。在第二个代码b中,函数正在修改所有局部变量a,而不是全局变量。但我们正在控制台中打印全局变量


这就是为什么两个代码中的结果都不同。

的可能重复在第一个示例中,您在具有全局作用域的函数b中使用已声明的a,而在第二个示例中,您在函数b中重新声明a,该函数仅限于b的作用域。