▌this
- this可以的調用外層物件的變數,但是不可以調用超過一層的物件。如果需要,必須用self來調用。
var obj={
 name:"neo",
 outer:function(){
   var self=this;
   function inner(){
     console.log(self.name);
   }
   inner();
 },
};
obj.outer();  // neo
- this是一種keyword,但不是變數
▌封包(closure)
- JS函式執行的scope chain用的是在他們定義時生效的chain
- 雖然inner被執行的時候checkscope()已經消失了,可是當inner()被定義的時候,他就是接收了local scope,因此扔然會輸出local scope
var scope="global scope";
function checkscope(){
  var scope="local scope";
  function inner(){
    return scope;
  }
  return inner;
}
console.log(checkscope()()); //local scope
▌巢狀函式(nested)
內部的函式可以存取外部的參數和變數(再多層也可以)
function outer(){
  var a=12;
  function inner(){
    function very_inner(){
      console.log(a)
    }
    very_inner();
  }
  inner();
}
outer();
// 會回傳12
 
 
 
 
沒有留言:
張貼留言