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

  • Caroline Saquet

    Caroline Saq

    1 EKİM 2011
  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012
  • TechSmartt

    TechSmartt

    29 Aralık 2010