javascript-初级-day06作用域、JS预解析机制

<!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>






<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>

<script>

/*
var num = 0;

function fn1(){
    num++;
}
function fn2(){
    num--;
}

fn2();
fn1();
fn2();
alert(num);
*/

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

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>










<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>

<script>

// alert(a);            // ...
alert( fn1 );        // FF 不能对下面的函数进行预解析

var a = 1;
function fn1(){
    alert(123);
}

if( true ){
    
}


</script>

</head>

<body>
</body>
</html>








<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>

<script>
window.onload = function (){
    var aBtn = document.getElementsByTagName('input');
    
    for( var i=0; i<aBtn.length; i++ ){
        aBtn[i].onclick = function (){
            
            // alert( i );            // 3
            
            for( var i=0; i<aBtn.length; i++ ){
                aBtn[i].style.background = 'yellow';
            }
            
            QQ: 1056104999
            bbs.miaov.com
            
        };
    }
};
</script>

</head>

<body>

<input type="button" value="按钮1" />
<input type="button" value="按钮2" />
<input type="button" value="按钮3" />

</body>
</html>
原文地址:https://www.cnblogs.com/q1359720840/p/10430598.html