4

私はcoffeescriptの可変スコープを理解しようとしていて、少し混乱しました。例を次に示します。

CoffeeScriptコード:

  x = "localscope"
  z = () -> 
    x = "functionscope"
    console.log(x)

  console.log(x)

Javascriptのコンパイル結果:

(function() {
  var x, z;

  x = "localscope";

  z = function() {
    x = "functionscope";
    return console.log(x);
  };

  console.log(x);

}).call(this);

私が純粋なJavaScriptで知っているように、関数でラップされたすべての変数は同じスコープで動作します。それで、私が理解したように、coffescriptで書かれたすべての変数はグローバルですか?

4

3 に答える 3

1

coffeescript で変数をシャドウするには、次のようにする必要があります。

x = "localscope"
z = ((x) -> () -> 
    x = "functionscope"
    console.log(x)
)(x)
console.log(x)

結果のJavaScriptは次のとおりです。

var x, z;

x = "localscope";

z = (function(x) {
  return function() {
    x = "functionscope";
    return console.log(x);
  };
})(x);

console.log(x);

あなたの例では、最も内側の関数に対してローカルではありませんが、最初に宣言しxたのと同じ「グローバル」を参照しています。x「グローバル」とは、同じファイル内のどこからでもアクセスできることを意味します。

于 2012-12-10T17:37:09.287 に答える