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

  • Hot For Nutrition

    Hot For Nutr

    26 ŞUBAT 2007
  • Kindness

    Kindness

    23 Ocak 2006
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009