js的作用域問題
在js中的作用:讀、寫
1) "找一些東西":關鍵字 如 var function 參數
a = 未定義
所有的變量,在正式運行代碼之前,都提前賦了一個值:未定義
fn1 = function fn1(){alert(2);}
所有的函數,在正式運行代碼之前,都是整個函數塊
js的預解析
遇到重用名時:只留一個
變量和函數重名時,就只留下函數,與代碼出現的前後順序無關
函數與函數重名時,則留下後出現的那個函數,與代碼出現的前後順序有關
2) 逐行解讀代碼:
表達式:= + - * % ++ -- ! 參數...
表達式可以修改預解析的值!包括函數
2、 js的全局變量與局部變量
1) script 可以在頁面中有多個,是全局變量,全局函數
遵循自上而下的規則
2)函數內的變量是局部變量
函數調用時,內部的變量與外部的變量互不影響
遵循由裏而外的規則(利用作用域鏈)當函數內部沒有變量時,則會在函數的 外部找變量進行賦值等操作 ,在函數中進行表達式賦值時,可以將局部變量 變爲全局變量
//此時js預解析庫裏存放的就只有 a = function a(){ alert(4);
var a = 1; //表達式將a的值進行修改 改寫爲1
alert(a); //1
function a(){alert(2);}
alert(a); //2
var a = 3; //表達式將a的值進行修改 改寫爲3
alert(a); //3
function a(){ alert(4);}
alert(a); //3
//此時js預解析庫裏存放的就只有a = 3
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
function fn1(a){
alert(a); //undefined
var a = 2;
}
fn1();
alert(a); //1
var a = 1;
function fn1(a){ //傳入參數var a = 1
alert(a); //1
var a = 2;
}
fn1(a);
alert(a); //1 函數內的變量改變不會影響外部的改變