关于javascript:解释如何在不使用数据类型“var”或“let”的情况下将值存储在javascript中

explain that how value should store in java script with out using datatype “var” or “let”

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

这是一个代码,你可以很容易地弄清楚发生了什么

1
2
3
4
5
6
7
8
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);

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

1
2
3
4
5
6
7
8
function value() {
  m = 8; //here i am using var as a datatype  
  console.log(m)
}
m = 7
console.log(m);
value();
console.log(m);

任何人都可以告诉我发生了什么事
谢谢你的时间


标识符(例如m)查找(获取其值)基本上只检查当前范围(如果变量存在于那里),否则它继续到父范围。所以在你的功能里面

1
2
3
function value() {
  m = 5;
 }

它将执行这样的查找:

1
function"value" scope -> execution scope -> global scope

所以它最终在全球范围内查找。由于在任何地方都没有m变量,它会在那里声明变量,因此m成为全局范围的一部分。这是错误的,因为页面上的每个脚本现在都可以访问和修改它。如果你追加一个var(或者甚至更好的let),它将在当前范围内声明变量(在m s情况下为值函数范围),当它查找时直接在那里找到它。因此,如果在全局范围中使用另一个m作为标识符,它们将引用两个不同的变量。


函数在函数范围内查找m,如果在那里找不到它,它会在更高的范围内搜索,这里是全局范围。

在第一个示例中,函数在函数范围中创建变量m,任何更新都将限制为函数中的变量。因此,基本上在这个例子中有2个变量,其中一个m属于全局范围,一个m属于函数范围。请参阅下面的代码解释。

1
2
3
4
5
6
7
8
9
10
var m;
function value() {
  var m; // creates a variable m in the function scope
  m = 8;
  console.log(m)
}
m = 7
console.log(m);
value();
console.log(m);

在第二个示例中,函数尝试访问函数中的变量m,但是在那里找不到,因此,在更高的范围(全局范围)中搜索并找到一个。所以,基本上在这个例子中只有一个m的变量属于全局范围。请参阅下面的代码解释。

1
2
3
4
5
6
7
8
9
var m;
function value() {
  m = 8; // no function scope, variable, updates global scope
  console.log(m)
}
m = 7
console.log(m);
value();
console.log(m);


看看w3school的JavaScript范围。

下面是全局变量和局部变量的差异的示例代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
m = 7;

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