理解上下文與作用域

2022-02-21 13:59:23 字數 1002 閱讀 4798

一直以來沒有對上下文(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,是指向新建立的例項物件 上下文可以在執行環境中...