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

  • Abbeydabby0277's channel

    Abbeydabby02

    9 ŞUBAT 2012
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • Wild Academy

    Wild Academy

    8 Aralık 2009