var a =1;
一、function和 while\for\if 形式中的{ }是不同的。
二、JS在function执行时对其中的变量声明进行全局分析。
三、如何在function内部放心地使用全局变量?
var a =1;
function test(){
alert(a);
var a = 2;
alert(a);
}
test();
alert(a);
首先不要被函数里面的顺序迷惑,下面是函数体(全局亦然)实际的执行顺序。
// 1.函数里面查var 后面的属性 // 2.发现已经声明了a 就是第4行的 var a =2 这句,先忽略‘=2’这部分;(即覆盖了全局的a),所以赋给初始值undefined,所以 这里面的所有a都是局部的 //
3.执行函数体(现在才是真正的执行函数),按你看到的实际顺序从上往下执行。4. 第一步执行alert(a),这里的a没有显式的赋值,第二步已经声明并给了初始值,所以是undefined,5. 执行var a=2, 给a赋值(第一次显式赋值),所以结果是2.;;;这里可以分开看 var a 和 a=2,声明部分已经在一开始就执行过,赋值是第5步才执行。。
一、Javascript的变量的scope是根据方法块来划分的(也就是说以function的一对大括号{ }来划分)。切记,是function块,而for、while、if块并不是作用域的划分标准。
二、Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定实变量的作用域。
三,当全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回到全局变量的scope,而当全局变量遇上局部变量时,怎样使用全局变量呢?用window.globalVariableName。