簡體   English   中英

JavaScript內部函數和“此”

[英]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

在這里,您將onetwo稱為函數,而不是某個對象的屬性(例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM