explain that how value should store in java script with out using datatype “var” or “let”
在这里我不明白当我在函数变量之前使用
这是一个代码,你可以很容易地弄清楚发生了什么
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); |
任何人都可以告诉我发生了什么事
谢谢你的时间
标识符(例如
1 2 3 | function value() { m = 5; } |
它将执行这样的查找:
1 | function"value" scope -> execution scope -> global scope |
所以它最终在全球范围内查找。由于在任何地方都没有
函数在函数范围内查找
在第一个示例中,函数在函数范围中创建变量
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); |
在第二个示例中,函数尝试访问函数中的变量
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(); |