1. 程式人生 > >作用域和作用域鏈

作用域和作用域鏈

作用域 ole 聲明 概念 tex urn function 註意 塊級作用域

1.作用域的概念和特點
<script type="text/javascript"> //1.作用域:變量和函數的可訪問範圍,可見性; //創建變量或者函數同時就規定了它的作用域;js沒有塊級作用域; //外部作用域可以不可以訪問內部作用域,內部作用域可以訪問外部作用域; //變量沒有在聲明或者沒有在函數內聲明的時候沒帶var就是全局作用域; //window對象的所有屬性擁有全局作用域;任何地方都可訪問; var a =10 ; function fn1(){ console.log(a); //10 (往上不往下找) } function fn2(){ var a =20; fn1(); } fn2();
</script>
2.變量作用域
<script type="text/javascript"> //變量提升 ,本作用域優先使用變量,如果沒有去它父級作用域直到全局作用域查找; //全局變量會占用內存;變量覆蓋應當註意減少使用; var a = ‘abcd‘ ; function fn(){ //第一個打印實際上是 把a提升到函數第一行var a; a =‘bcd‘; console.log(a); //undefined var a = ‘bcd‘; console.log(a) //bcd } fn(); console.log(a);
//不會幹擾 依舊是全局abcd </script>
3.函數參數的(變量)的機制
<script type="text/javascript"> // function fn(a,b){ //第一行相當於var a,b console.log(a,b);// 1,2 } fn(1,2); console.log(a,b) //報錯a,b is not defined </script>
4.常見函數作用域情況一
<script type="text/javascript"> //簡單的往外層找 var a = 1; function fn(){ var
a = 6; function fn2(){ console.log(a); //6 } return fn2; } var test = fn(); test(); </script>
5.常見的函數作用域二
<script type="text/javascript"> //簡單的往外層找 var a = 1; function fn(){ var a = 6; function fn2(){ console.log(a); //20 } a = 20; //替代a = 6;了 return fn2; } var test = fn(); test(); </script>

作用域鏈:根據在內部函數可以訪問外部函數變量的這種機制(個人理解)

作用域和作用域鏈