var func=function(){console.log(that)}
var obj = {
foo(){
var that=this;
var a=func;
a();
}
}
obj.foo();
結果:次のjavascriptコードでは、なぜfunc関数にアクセスできない変数がありますか?
キャッチされないにReferenceError:
var func=function(){console.log(that)}
var obj = {
foo(){
var that=this;
var a=func;
a();
}
}
obj.foo();
結果:次のjavascriptコードでは、なぜfunc関数にアクセスできない変数がありますか?
キャッチされないにReferenceError:
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();
JavaScriptはレキシカルスコープではなく、動的スコープを使用しているため。これは、実行時に呼び出しスコープで変数が参照されないことを意味します。ソースコードのネスト構造のみが重要です。
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();
変数aに関数の参照がありますか? – Siddharth