js隨筆-變量作用域
阿新 • • 發佈:2017-07-03
return define highlight 全局 向上 不能 efi 訪問 turn
1.函數中定義的變量只在函數中起作用,所以兩個函數定義相同的變量互不影響
function fun(){ var i=0 } console.log(i);//i is not defined
2. 函數中內嵌函數時,內部的函數可以訪問外部函數的變量,外部函數則不能訪問內部的變量
function fun(){ var i=0; function fun2(){ var j=1; console.log(i); } fun2(); } fun();//0
function fun(){ var i=0; console.log(j) function fun2(){ var j=1; console.log(i); } fun2(); } fun();//j is not defined
3.當內部函數與外部函數定義同樣的變量的時候,內部函數會把外部函數的變量覆蓋掉,所以變量查找,都會先在當前作用域中查找,如果找不到會不停的向上查找,最後如果在全局作用域中也沒有找到,則報ReferenceError錯誤。
4.因為js會提升變量聲明,不會提升變量賦值,因此在變量聲明前使用變量也不會報錯,因此最好在函數內部首先申明所有變量
5.減少命名沖突的辦法,是把所有的變量和方法都綁定到自己的全局變量上
// 唯一的全局變量MYAPP: var MYAPP = {}; // 其他變量: MYAPP.name = ‘myapp‘; MYAPP.version = 1.0; // 其他函數: MYAPP.foo = function () { return ‘foo‘; };
6.let可以聲明一個塊級作用域,const可以定義常量
js隨筆-變量作用域