萧边认为,这个问题是理解Javascript的范围很有帮助,所以我梳理出来,希望能帮助到别人。

首先,看下面的问题:




var arr = { 1, 2, 3 };
对于(var i = 0,J;J = ARR {我+ };){
console.log(J);
}

console.log(' ---------);
console.log(我);
console.log(' ---------);
Console.log (J);
console.log(' ---------);




在问题解决之前,我们首先回顾Javascript中可变域的知识。

全局变量(全局变量)

全局变量是一个可以在任何地方访问的变量,并且有两个实例。

声明外部函数,是否使用var关键字

在函数中,声明不使用var关键字,语句语句必须在执行前执行。

局部变量(局部)

只能在声明的函数中访问局部变量。

在函数中声明,使用var关键字

两点注意的地方

先看代码:




警报(i);未定义的输出

对于(var i = 0;i < 1;i + +){ };

警报(i);输出1



Javascript中没有语句范围。句子中定义的变量将扩散到语句的外部。在这个例子中,我在for语句中声明,但是可以在for语句之外访问它。

我可以在for语句之前访问,但现在没有分配它。

开始我们的问题

在使用i之后添加了++:

第一次执行,J = ARR { 0 },然后我= 1,console.log(J)输出1

第二执行,J = ARR { 1 },然后我= 2,ocnsole.log(J)输出2

第三执行,J = ARR { 2 },然后我= 3,ocnsole.log(J)输出3

第四次(不符合条件),J = ARR { 3 }是未定义的,那么我= 4,ocnsole.log(J)不输出,退出for循环

在for语句执行的console.log(我)输出4从上面的分析,和console.log(J)输出定义

最终输出结果如下:




二
—
—
未定义
—



鉴于以上分析和结果,我们必须把一切都弄清楚,然后再出发。

把问题改成问题

标题:

var arr = { 1, 2, 3 };




对于(var i = 0,J;J = ARR { +我};){
console.log(J);
}

console.log(' ---------);
console.log(我);
console.log(' ---------);
console.log(J);
console.log(' ---------);




答案uff1a




二
三
—
三
—
未定义
—



把问题改成两个问题

标题:




函数xxx(){
var arr = { 1, 2, 3 };
对于(var i = 0,J;J = ARR {我+ };){
console.log(J);
}
}
(XXX);

console.log(' ---------);
console.log(我);
console.log(' ---------);
console.log(J);
console.log(' ---------);




答案uff1a


一
二
三
—
虚假报道:Uncaught ReferenceError:我没有定义



希望大家能分享这个,希望了解javascript的帮助范围。