2016-04-01 7 views
-1

私はnodeschool.ioからjavascriptのプラクティスをやっている、と私はこのコードを与えられたが:Javascriptingは、スコープチェーンの練習

var a = 1, b = 2, c = 3; 
 

 
(function firstFunction(){ 
 
\t var b = 5, c = 6; 
 

 
\t (function secondFunction(){ 
 
\t \t var b = 8; 
 

 
\t \t (function thirdFunction(){ 
 
\t \t \t var a = 7, c = 9; 
 

 
\t \t \t (function fourthFunction(){ 
 
\t \t \t \t var a = 1, c = 8; 
 

 
\t \t \t })(); 
 
\t \t })(); 
 
\t })(); 
 
})();

私は私がしようとし、この内部で何かをアクセスすることはできませんよそれこのような:

var a = 1, b = 2, c = 3; 
 

 
var start = (function firstFunction(){ 
 
\t var b = 5, c = 6; 
 

 
\t var secondFunction = (function secondFunction(){ 
 
\t \t var b = 8; 
 

 
\t \t (function thirdFunction(){ 
 
\t \t \t var a = 7, c = 9; 
 

 
\t \t \t (function fourthFunction(){ 
 
\t \t \t \t var a = 1, c = 8; 
 

 
\t \t \t })(); 
 
\t \t })(); 
 

 
\t \t return { 
 
\t \t \t secondFunction: secondFunction, 
 
\t \t \t printB: function() { 
 
\t \t \t \t return b; 
 
\t \t \t } 
 
\t \t } 
 

 
\t })(); 
 

 
\t return { 
 
\t \t printC: function() { 
 
\t \t \t return c; 
 
\t \t } 
 
\t } 
 

 
})(); 
 

 
console.log("a: " + a + ", b: " + start.secondFunction.printB() + ", c: " + start.printC());

私のアプローチが正しいかどうかはわかりませんが、私はこれを一日中続けました。これにどのようにアプローチして、secondFunction.printCに入るために私のコードが働いていないのですか?

+4

何のためのアプローチですか?どのような問題を解決しようとしていますか? – Barmar

+1

'secondFunction'は' start'から返されませんか? – guest271314

+0

また、直ちに呼び出される関数をすべて変数に設定するのはなぜですか? – Damon

答えて

1

このようなものを試してください。

var a = 1, b = 2, c = 3; 

var start = (function firstFunction(){ 
    var b = 5, c = 6; 
    var obj = {}; 

    (function secondFunction(){ 
    var b = 8 
    obj.secondFunction = function(){ 
     return b; 
    }; 
    (function thirdFunction(){ 
     var a = 7, c = 9; 
     obj.thirdFunction = function(){ 
      return c; 
     }; 
     (function fourthFunction(){ 
      var a = 1, c = 8; 
      obj.fourthFunction = function(){ 
       return c; 
      }; 
     })(); 
    })(); 
    })(); 
    return obj 
})(); 

console.log (start.secondFunction()) 
+0

私は実際には、obj.firstFunction = function(){return c; }; ( "a:" + a + "、b:" + start.secondFunction()+ "、c:" + start.firstFunction());ここですべての値を返すことができました。どうやってこれに来たのか説明できますか?私は異なった考え方が必要ですか? –