作用域2—JS学习笔记2015-6-10(第54天)

一、参数,也可以理解为表达式,参数在使用的时候相当于赋值

var a=1;

function fn1(a){  // 这里的参数a 相当于:var a = 1;  a由未定义,变成1,这里的变量是局部变量,与外面的var a=1;是不同的;

  alert(a); // 1 这里是局部变量;

  a=2;

}

fn1(a);

alert(a); // 1   因为这里的a还是访问到全局变量;

// 想要获取函数内的值:

方法一:通过作用域链,反向获取;全局变量;

var str = '';
function fn1(){

  var a='大鸡腿~';
  str = a;

}
fn1();
alert(str); // 此时str的值就是a;

方法二:通过参数传递;

function fn2(){

var a='自由~';
fn3(a);

}
fn2();
function fn3(a){ // 这里的a 不是上面的a,也可以是b,c...用来接收函数的传递
alert(a);
}

二:if判断,for循环不是作用域,与函数不一样,但使用时候要特别小心;

先解析,后执行,才是作用域的标志;因此函数是一个作用域;但if,for等大括号就不是一个作用域了;

处于兼容性考虑,在想定义全局变量,或者全局函数的时候,请放到if,for等外面去;

for里面的function不要直接使用已经定义的变量 i,否则会有隐患的(提示我们在使用for循环的时候要特别小心,放到不同的位置,可能会是不同的值)

例如:

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 5 <title>无标题文档</title>
 6 
 7 
 8 
 9 </head>
10 
11 <body>
12 
13 <input type="button" value="按钮1">
14 <input type="button" value="按钮2">
15 <input type="button" value="按钮3">
16 
17 <script>
18 
19 var aBtn = document.getElementsByTagName('input');
20 
21 for( var i=0; i<aBtn.length;i++){
22 
23   aBtn[i].onclick = function(){
24       
25      //alert(i); // 返回 3;
26        //aBtn[i].style.background = 'blue'; // 此时点击按钮,不会有反应而且会报错,因为此时的i已经经过三次的自增,成为了3;而aBtn[3]则根本不存在;
27      for( var i=0; i<aBtn.length; i++){
28            aBtn[i].style.background = 'blue';
29      }
30 
31   }
32 
33 }
34 </script>
35 </body>
36 </html>
原文地址:https://www.cnblogs.com/zhangxg/p/4567756.html