this作用域在函式呼叫和方法呼叫中的區別

2021-09-07 04:28:49 字數 653 閱讀 8985

var o = 

console.log(n());

return n();}};

console.log(o.m()); //物件是window

var o = ,

n: function()

};console.log(o.m()); // 物件是o

上面兩段**,為什麼得到的值不一樣呢?筆者對此百思不得其解,筆者學藝不精,一直覺得函式和方法是同樣的東西,今天才算知道兩者之間的區別了。

函式:可以直接呼叫執行,不需要依賴於物件等其他的東西,在第一段**中,n(),可以直接這樣呼叫就可以了,n是函式;

方法:是特殊的函式,但是方法的呼叫需要借助於物件,在第二段**中,o.m(),這個m就是方法;

兩者的具體區別可以檢視該部落格:函式和方法的區別

再了解了函式和方法的區別之後,再去認真讀下面一段話,就會清晰很多,就能解釋為什麼上面兩段**的返回值不一樣的原因了。

和變數不同,關鍵字this沒有作用域的限制,巢狀的函式不會從呼叫它的函式中繼承this。如果巢狀函式作為方法呼叫,其this的值指向呼叫它的物件。如果巢狀函式作為函式呼叫,其this值不是全域性物件(非嚴格模式下)就是undefined(嚴格模式下)。

函式作用域和作用域鏈

所謂作用域就是 變數在宣告它們的函式體以及這個函式體巢狀的任意函式體內都是有定義的。function scope while 1 function console.log foo,global a,i m if b,i m while c c is not defined scope 但是,在js中...

Js 函式作用域和塊作用域

你不知道的js 第二版上捲第三章筆記 全域性作用域 定義在函式外部的變數,函式內部可以呼叫 區域性作用域 定義在函式內部的變數,函式外部不可以呼叫 塊級作用域 如同下面這個例子 for var i 1 i 10 i console.log i,b 輸出的還是 10 100!說明js沒有塊級作用域當我...

潛談函式作用域和作用域鏈

全域性作用域 區域性作用域 1 全域性作用域 定義 在js的任意地方都可以獲取和使用 1 最外面的定義的變數就擁有全域性作用域 var a 1 function test console.log a 1 2 任何變數,如果沒有宣告就賦值,此變數會為全域性物件所有 function test test...