1

これが私の実験的なスクリプトです:

window.name = 'myWindow';

function sum(num1, num2){
    console.log('context name: '+this.name+', caller: '+arguments.callee.caller.name);
}

function callSumNoName(num1, num2){
    sum.call(this, num1, num2);
}

function callSum(num1, num2){
    this.name = 'fnCallSumm';
    sum.call(this, num1, num2);
}

console.log(callSumNoName()); // no property name in the function
console.log(callSum());       // the property name is 'fnCallSumm'
console.log(callSumNoName()); // no property name in the function

関数sum()内のthis.nameは次のようにする必要があると予想しました。

myWindow
fnCallSumm
myWindow

...しかし、実際には次のとおりです。

myWindow
fnCallSumm
fnCallSumm

どういう意味ですか?!3 回目には、今抽出する必要があるウィンドウ オブジェクトの name プロパティではなく、前回関数呼び出し元の name プロパティが表示されるのはなぜですか?

4

2 に答える 2

1

前の呼び出しで名前の値を設定したためです。this.name は「fnCallSumm」になりました

function callSumNoName(num1, num2){
    this.name = "myWindow";
    sum.call(this, num1, num2);
}
于 2013-09-25T14:26:05.170 に答える