SORU
11 EKİM 2013, Cuma


Bu Node.js ile ÇOĞALTMA) bir işlev çağırarak neden( iş?

Neden böyle bir JavaScript işlevini çağırmak için mümkün, node.js ile test edilmiştir:

~$ node
> function hi() { console.log("Hello, World!"); };
undefined
> hi
[Function: hi]
> hi()
Hello, World!
undefined
> hi)( // WTF?
Hello, World!
undefined
>

Neden son çağrı, hi)(, çalışıyor mu? Tüm çevirmenlere node.js V8 motoru hata, resmen tanımsız davranış, ya da aslında geçerli bir JavaScript hata mı?

CEVAP
11 EKİM 2013, Cuma


ÇOĞALTMA sonuçta olan giriş, değerlendirir nasıl olabilir:

(hi)()

Ek parantez to force it to be an Expression eklendi:

  // First we attempt to eval as expression with parens.
  // This catches '{a : 1}' properly.
  self.eval('('   evalCmd   ')',
      // ...

Niyet block Object/initialisers harfleri yerine {...} tedavi etmektir.

var stmt = '{ "foo": "bar" }';
var expr = '('   stmt   ')';

console.log(eval(expr)); // Object {foo: "bar"}
console.log(eval(stmt)); // SyntaxError: Unexpected token :

Ve leesei belirtildiği gibi, bu 0.11 için değiştirildi.17* *tüm giriş yerine hangi x,:

  if (/^\s*\{/.test(evalCmd) && /\}\s*$/.test(evalCmd)) {
    // It's confusing for `{ a : 1 }` to be interpreted as a block
    // statement rather than an object literal.  So, we first try
    // to wrap it in parentheses, so that it will be interpreted as
    // an expression.
    evalCmd = '('   evalCmd   ')\n';
  } else {
    // otherwise we just append a \n so that it will be either
    // terminated, or continued onto the next expression if it's an
    // unexpected end of input.
    evalCmd = evalCmd   '\n';
  }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • Good Creative Academy

    Good Creativ

    19 Kasım 2009
  • TomOdellVEVO

    TomOdellVEVO

    29 Mayıs 2012