解释如何在 javascript 中使用数据类型“var”或“let”存储值以及执行堆栈如何工作

man*_*439 5 javascript

在这里,我不明白当我var在函数中使用 before 变量时会发生什么,它给了我不同的输出,并且不使用var也得到了不同的输出

这是一段代码,您可以轻松地弄清楚发生了什么

function value() {
  var m = 8; //here i am using var as a datatype  
  console.log(m)
}
m = 7
console.log(m);
value();
console.log(m);
Run Code Online (Sandbox Code Playgroud)

而且当我删除 var 或不使用值函数中的任何数据类型时,我得到了不同的输出,这里是一个代码

function value() {
  m = 8; //here i am not using var as a datatype  
  console.log(m)
}
m = 7
console.log(m);
value();
console.log(m);
Run Code Online (Sandbox Code Playgroud)

谁能告诉我发生了什么事吗?谢谢您的宝贵时间

Ter*_*Wei 3

看看 w3school 的JavaScript Scope

下面是全局变量和局部变量区别的示例代码。

function value() {
    // local variable in value()
    var m = 8;
    console.log("in value() : " + m)
}
function value2() {
    // set global variable as 9
    m = 9;
    console.log("in value2() : " + m)
}
// global variable
m = 7
console.log("before value() : " + m);
value();
console.log("after value() : " + m);
value2();
console.log("after value2() : " + m);
Run Code Online (Sandbox Code Playgroud)

下面是另一个案例来显示范围的差异:

m = 7;

function v(){
  var m = 6;
  v2();
  function v2(){
    console.log("in v2 : " + m);
    v3();
  }
}
function v3(){
  console.log("in v3 : " + m);
}
v();
Run Code Online (Sandbox Code Playgroud)