[英]JavaScript Inner Functions & 'this'
在我的理解,它是不是直到有一個對象調用, 這實際上是分配一個值的函數。 並且為其分配的值完全基於調用該功能的對象。
另外,JS中的范圍鏈規則是LEG。
因此,在(嚴格模式)下:
function one () {
var a = 2;
function two () {
console.log(a)};
two()
}
one() // output 2
但:
function one () {
var a = 2;
function two () {
console.log(this.a)};
two()
}
one() //output undefined
這是我understandig功能為對象,在以前的invokation函數對象之一將是使該兩個電話,這轉化成this.a one.a。 顯然不是這樣。
也:
function one () {
var a = 2}
console.log(one.a) //outputs undefined
關於正在發生的任何澄清將不勝感激。
謝謝
function one () {
var a = 2;
function two () {
console.log(this.a)};
two()
}
one() //output undefined
在這里,您將one
和two
稱為函數,而不是某個對象的屬性(例如someObject.one()
)。 這意味着, this
將是指全球范圍內(或到undefined
如果代碼是在嚴格模式下)。 全局范圍的a
屬性是undefined
,所以這就是為什么您看到undefined
的原因。 調用two()
內one()
這樣不會使this
是指one
。
function one () {
var a = 2}
console.log(one.a) //outputs undefined
a
是沒有的屬性one
。 這是它里面的變量。 的屬性one
是這樣的。
function one() { } one.a = 7; console.log(one.a);
我認為您正在將常規函數視為類對象。 您僅調用one(),但實際上並未實例化新的One()對象。
范圍和上下文是不同的概念。 在JS-Function范圍內,只要該函數本身是外部范圍的成員,就可以處理在函數內部分配的任何值或在該函數外部分配的任何值。 另外,只要函數不創建閉包, 作用域就在函數的調用時創建。 上下文也是可尋址的。 但是與scope不同, 上下文在函數調用時進行評估 。 因此, this
只是上下文的占位符,可以從一次調用一個函數到另一個調用一次而有所不同。
function contextAwareMethod(injectedValue) { "use strict"; var context = this, // dynamically evaluated. innerScopeValue = "created at a functions call time"; console.log('dynamically evaluated context : ', context); console.log('this.contextValue : ', (context && context.value)); console.log('innerScopeValue : ', innerScopeValue); console.log('injectedValue : ', injectedValue); } console.log('"case A"'); contextAwareMethod('argument A'); console.log('\\n'); console.log('"case B"'); contextAwareMethod.call({ value: "conext B"}); console.log('\\n'); console.log('"case C"'); contextAwareMethod.call({ value: "conext C"}, 'argument C'); console.log('\\n');
.as-console-wrapper { max-height: 100%!important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.