2017-11-21 9 views
-1

誰でもこれに答えることができますか?出力のヘルプが必要

以下のコードはコンソールに出力され、その理由は何ですか?

(function(){  
  var a = b = 3;  
})(); 
console.log("a defined? " + (typeof a !== 'undefined'));  
console.log("b defined? " + (typeof b !== 'undefined')); 

以下のコードはコンソールに出力され、その理由は何ですか?あなたのコードの

var myObject = { 
    foo: "bar",  
    func: function() {  
        var self = this;  
        console.log("outer func:  this.foo = " + this.foo);  
        console.log("outer func:  self.foo = " + self.foo);  
        (function() {  
            console.log("inner func:  this.foo = " + this.foo); 
            console.log("inner func:  self.foo = " + self.foo); 
        }());  
    }  
};  
myObject.func(); 
+1

'console'への出力以下のコードは、あなたがそれを実行してみました何があるのだろうか? – Justinas

+0

最初のもの:[ここ](https://stackoverflow.com/questions/27329444/whya-a-is-undefined-while-b-is-3-in-var-ab-3)第2のもの:ここに](https://stackoverflow.com/questions/27310385/why-method-of-current-object-in-inner-function-is-undefined) –

答えて

1

まずコード:

(function(){  
    var a = b = 3;  
})(); 
console.log("a defined? " + (typeof a !== 'undefined'));  
console.log("b defined? " + (typeof b !== 'undefined')); 

出力:

a defined? false 
b defined? true 

Explaination: Immediately Invoked Function Expression(IIFE)を使用しています。ここではaは関数のスコープ内で宣言されていますが、bは宣言されていないため、グローバルスコープに登録されています。今度はabのグローバルスコープ外にアクセスしているので、aundefinedですが、bdefinedです。

セカンドコード:

var myObject = { 
    foo: "bar",  
    func: function() {  
     var self = this;  
     console.log("outer func: this.foo = " + this.foo);  
     console.log("outer func: self.foo = " + self.foo);  
     (function() {  
      console.log("inner func: this.foo = " + this.foo); 
      console.log("inner func: self.foo = " + self.foo); 
     }());  
    }  
};  
myObject.func(); 

出力:

outer func: this.foo = bar 
outer func: self.foo = bar 
inner func: this.foo = undefined 
inner func: self.foo = bar 

、について説明:

ここで重要なのは、オブジェクトのプロパティである関数内this参照ですそのオブジェクト自体。だから最初の2つはlogs期待どおりの結果を印刷します。次に、あなたはIIFEを使用しており、global Object(Window object)は、IIFE内のthisの参照です。従って、this.fooは、undefinedであるWindow.fooを意味する。しかし、selfは、そのオブジェクトに等しい値を持つ関数内でアクセス可能です。したがって、foo変数を出力します。

+1

この答えのためのThx何を探しているのですか? – user2496713

4

最初の部分がこれに相当します。この場合a

(function(){ 
 
    var a; 
 
    b = 3; 
 
    a = b; 
 
})(); 
 

 
console.log("a defined? " + (typeof a !== 'undefined')); 
 

 
console.log("b defined? " + (typeof b !== 'undefined'));

、現在の関数で宣言され、現在のスコープに関連し、それの範囲の外に表示されません。だから、外側の範囲にundefinedです。しかし、bはグローバル変数として宣言されているため、どこにでも表示され、undefinedではなく、その値は3です。

最後のコード部分はどうですか?は、それぞれの機能に固有のコンテキストがあり、thisが参照されます。いくつかのプログラミング言語でメソッドとも呼ばれる第1レベルの関数の場合、thisは、それが呼び出される現在のオブジェクトを参照します。しかし、funcの中で宣言された内部関数に対しては、自身のコンテキストがあり、それにはthisが参照されます。だからなぜthisundefinedを指しています - オブジェクトではありません。しかし、その関数の外側のスコープで宣言されているselfのような別の変数を使用すると、外部変数にアクセスできます。キー部分は、名前がthisの変数に関連しています。これは特別です。

var myObject = { 
 
    foo: "bar",  
 
    func: function() {  
 
     var self = this;  
 
     console.log("outer func: this.foo = " + this.foo);  
 
     console.log("outer func: self.foo = " + self.foo);  
 
     (function() {  
 
      console.log("inner func: this.foo = " + this.foo); 
 
      console.log("inner func: self.foo = " + self.foo); 
 
     }());  
 
    }  
 
};  
 
myObject.func();

+0

はいそれは同じですが、出力を知りたい – user2496713

+0

出力を参照 –

1

以下のコードは、関数内で直ちに起動機能 可変a & bの範囲であるが、console.logfunction外であるので、それらは

console.log("a defined? " + (typeof a !== 'undefined')); //output a defined false 
console.log("b defined? " + (typeof b !== 'undefined')); //output b defined? true 

(function() { 
 
    var a = b = 3; 
 
})(); 
 
console.log("a defined? " + (typeof a !== 'undefined')); 
 
console.log("b defined? " + (typeof b !== 'undefined'));

を未定義であろう

下のスニペットにコメントを追加しました。うまくいけば有用でしょう

var myObject = { 
 
    foo: "bar", 
 
    func: function() { 
 
    // here this & self will refer to the myObject 
 
    var self = this; 
 
    console.log("outer func: this.foo = " + this.foo); //outer func: this.foo = bar  
 
    console.log("outer func: self.foo = " + self.foo); //outer func: self.foo = bar  
 
    (function() { 
 
     // here self will refer to the myObject context where as 
 
     // this will refer to window object. 
 
     // In window foo is not defined, so it will give undefined 
 
     console.log("inner func: this.foo = " + this.foo); //inner func: this.foo = undefined 
 
     console.log("inner func: self.foo = " + self.foo); //inner func: self.foo = bar 
 
    }()); 
 
    } 
 
}; 
 
myObject.func();