2019年1月19日 星期六

【Ch8函式】this & closure & 巢狀函式(nested)


▌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

沒有留言:

張貼留言

【JavaScript】用物件Mapping的方法

If的寫法 我們希望當變數是a時就回傳1,變數是b就回傳2,變數是c就會回傳3,一般寫法就是用if,但是這樣會很冗 ​ // IF style var word if(word == 'a'){ word = 1 } else if...