2016-08-12 6 views

答えて

0

thatが定義されていない、それが宣言のWHEREそれだからだけfoo内に存在します。 func関数がfooの外にあるため、that変数はそこに存在しません。

あなたは両方の場所でそれにアクセスできるようにしたい場合は、両方の機能の外にそれを宣言することができます。

var that; 
var func=function(){console.log(that)} 
var obj = { 
    foo(){ 
     that=this; // <-- no var 
     var a=func; 
     a(); 
    } 
} 

obj.foo(); 
0

JavaScriptはレキシカルスコープではなく、動的スコープを使用しているため。これは、実行時に呼び出しスコープで変数が参照されないことを意味します。ソースコードのネスト構造のみが重要です。

+0

変数aに関数の参照がありますか? – Siddharth

0

thatへの参照がfuncにありません。グローバル変数としてと宣言するか、funcのパラメータとして渡します。

オプション1:パラメータとして

var func = function(that) { 
 
    console.log(that) 
 
} 
 
var obj = { 
 
    foo() { 
 
    var that = this; 
 
    var a = func(that); 
 
    //invoke function a like this; 
 
    a; 
 
    } 
 
} 
 

 
obj.foo();

オプション2 thatを渡す:グローバル変数として宣言that

var that; 
 

 
var func = function() { 
 
    console.log(that) 
 
} 
 
var obj = { 
 
    foo() { 
 
    that = this; 
 
    var a = func(that); 
 
    //invoke function a like this; 
 
    a; 
 
    } 
 
} 
 

 
obj.foo();

関連する問題