作用域

作用域、JS预解析、表达式

  1. 作用域:在一定范围内起作用。(一个函数就是一个作用域)
  2. JS预解析:变量(var a)、函数(函数块)、参数
  3. JS执行代码:在预解析完成以后,执行 表达式。函数声明不能改变值。
  4. 表达式:能改变值;函数声明不能改变值。
  5. 局部与全局:局部变量、函数(函数内);全局变量、函数(标签内)。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script>
// 作用域:
// 域:空间、范围、区域……
// 作用:读、写
    script      全局变量、全局函数
        自上而下

    函数
        由里到外
    {}
    浏览器:
        “JS解析器”
            1)“找一些东西”   :var  function 参数
                            a = ...
                                    所有的变量,在正式运行代码之前,都提前赋了一个值:未定义
                            fn1 = function fn1(){ alert(2); }
                                    所有的函数,在正式运行代码之前,都是整个函数块
                            JS 的预解析
                        遇到重名的:只留一个
                            变量和函数重名了,就只留下函数                     
            2)逐行解读代码:
                        表达式:= + - * / % ++ -- ! 参数……    
                        表达式可以修改预解析的值!

alert(a);                   // function a (){ alert(4); }
var a = 1;
alert(a);                   // 1
function a (){ alert(2); }
alert(a);                   // 1
var a = 3;      
alert(a);                   // 3
function a (){ alert(4); }
alert(a);                   // 3

alert( typeof a );
// a();                                 // 报错
*/

/*
var a = 1;
function fn1(){
    alert(a);                       // undefined
    var a = 2;
}
fn1();
alert(a);                           // 1

var a = 1;
function fn1(){
    alert(a);                       // 1
    a = 2;
}
fn1();
alert(a);                           // 2
*/

/*
var a = 1;
function fn1(a){
    alert(a);                       // undefined
    a = 2;
}
fn1();
alert(a);                           // 1


var a = 1;
function fn1(a){
    alert(a);                       // 1
    a = 2;
}
fn1(a);
alert(a);                           // 1
*/
</script>
</head>
<body>
</body>
</html>

数据传输:全局获取局部;局部获取局部;局部获取全局

  1. 全局获取局部:定义新的全局变量。
  2. 局部获取局部:传参。
  3. 局部获取全局:直接使用全局变量,默认获取。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>

<script>



//全局获取局部:定义新的全局变量
var str = '';
function fn1(){
    var a = '大鸡腿~';
    str = a;
}
fn1();
// alert( str );



//局部获取局部:传参
function fn2(){
    var a = '9999999克拉钻石23456789';
    fn3(a);
}
fn2();

function fn3(a){
    alert(a);
}

</script>

</head>

<body>
</body>
</html>

if(){} for(){} 内尽量不要包含function。火狐内不能对if for 内的function进行解析。

原文地址:https://www.cnblogs.com/wenwenwei/p/10017881.html