一直以來沒有對上下文(context)的定義,總有些模糊,沒有認真地總結過,聽到這個詞,會想到看過的「上下文是函式執行環境」,「上下文是this」,但真的讓自己去解釋還真說不上來,故趁今日有空總結溫故一番,有什麼錯誤的,還望大家提出!
函式使用它們實參的值 來計算返回值,成為該函式呼叫表示式的值。除了實參之外,每次呼叫還會擁有另外乙個值——本次呼叫的上下文——這就是this關鍵字的傳值。
如果函式掛載在乙個物件上,作為物件的乙個屬性,就稱它為物件的方法。當通過這個物件來呼叫函式時,該物件就是此次呼叫上下文(context),也就是該函式的this的值 。用於初始化乙個新建立的物件的函式稱為建構函式。
寫一段簡單的**理解這段話:
//定義乙個物件控制台輸出結果:var context =
};//當通過這個物件來呼叫函式時,該物件就是此次呼叫上下文(context),也就是該函式的this的值
context.func();
this**了該函式的上下文(context),即物件context本身;
作用域:函式的執行依賴於變數作用域,這個作用域是在函式定義時決定的,而不是函式呼叫時決定的。
因為沒理解好這條規則,故前兩天晚上看了篇文章的示例沒能理解,一直想不通 t t
示例:( 一直在想為什麼第二個bar輸出的是1,不是2 )
function好吧,作用域在函式定義時決定的,現在明白了,原諒我的無知......foo()
};var bar =foo();
bar(); //1
var x = 2;
bar();
//1
接下來,來把頭腦內混亂的 「上下文?作用域?上下文?作用域?」 再度區分下吧。
上下文(context)->this->掛載著變數與函式的物件(object-base)
作用域->函式定義時決定->作用於函式(function-base)
兩者乙個基於物件乙個基於函式。
作用域與執行上下文
1.區別1 全域性作用域之外,每個函式都會建立自己的作用域,作用域在函式定義時就已經確定了,而不是在函式呼叫時 全域性執行上下文環境是在全域性作用域確定之後,js 馬上執行之前建立 函式執行上下文環境是在呼叫函式時,函式體 執行之前建立 2.區別2 作用域是靜態的,只要函式定義好了就一直存在,且不會...
作用域和上下文
作用域分為全域性作用域和區域性作用域。區域性作用域中可訪問全域性變數,但是全域性作用域中無法訪問某一區域性作用域中的區域性變數。上下文常常代表this變數的值及其指向,它決定乙個函式怎麼被呼叫,但乙個函式被作為物件的乙個方法被呼叫的時候,this總是指向呼叫這個方法的物件。this往往指向當前函式的...
作用域和上下文
上下文 this變數的值,以及他的指向。function pet words pet 全域性呼叫 js中this指向函式的擁有者,通常將擁有者叫執行上下文。this只能在函式內部使用。this指向 1 函式擁有者 2 全域性 3 在建構函式中的this,是指向新建立的例項物件 上下文可以在執行環境中...