1. 程式人生 > >js隨筆-變量作用域

js隨筆-變量作用域

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隨筆-變量作用域