4

この記事によると

JavaScriptコードの最初のステートメント¹として「usestrict」を追加すると、全体に厳密モードが適用されます

なぜ :

"use strict";
012; 

エラーをスローしません

その間

(function () {
    "use strict";
    012; })();

しますか? (厳密モードでは、8進リテラルは使用できません。)

ジョン・レシグはそれについて何も言いません。彼はただ言う:

単純。これをプログラムの上部に投げて、スクリプト全体で有効にします。

"厳密に使用"; または、関数内に配置して、そのコンテキスト内でのみ厳密モードをオンにします。

function imStrict(){"use strict"; //...コード...}

編集 :

ここに画像の説明を入力してください

#2を編集します。

console。(chrome)でコードをテストしました。jsbinサンプルで-動作しています。それでも、コンソールで動作が異なる理由がわかりません。

4

3 に答える 3

2

エラーをスローします

quentin@workstation:~ # cat > tmp/foo.js
"use strict";
012; 

quentin@workstation:~ # node tmp/foo.js

/users/quentin/tmp/foo.js:2
012; 
^^^

module.js:434
  var compiledWrapper = runInThisContext(wrapper, filename, true);
                        ^
SyntaxError: Octal literals are not allowed in strict mode.
    at Module._compile (module.js:434:25)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)
    at Array.0 (module.js:484:10)
    at EventEmitter._tickCallback (node.js:190:38)
于 2013-01-20T14:53:52.367 に答える
1

コンソールは他の場所と同じように動作しません。ブラウザで以下を開いてみてください。関数でラップしなくてもエラーが再表示されます。

<!doctype html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>use strict</title>
        <script>
"use strict";
012;
        </script>
    </head>
    <body>
    </body>
</html>

~、、などと入力するだけで、コンソールが直接実行とは異なる方法で実装されていることがわかり+ます(を取得しますSyntaxError: Unexpected token })。このようなコードを直接記述することで、同様の動作を再現することができます(コンソールの動作がわからないため、同じ
ようには呼びません)。

example: { // labeled block
    "use strict"; // your code
    012;
} // end of block, no SyntaxError thrown for strict
于 2013-01-20T15:11:10.357 に答える
-1

012は、ECMA-262のエディション3で非推奨になっているため、厳密モードでは許可されていない8進リテラルです。JavaScript 1.5は、下位互換性のために、その8進整数リテラルを引き続きサポートします。あなたの例はエラーを投げています!

3つの可能性があります。

  1. その8進数リテラルを削除します

  2. 厳密モードは使用しないでください

  3. または、最初に8進数リテラルを使用し、すべてのコードを無名関数でラップし、厳密モードをすぐに呼び出される関数式(iife)に制限することができます。

012;

(function () {
  "use strict";

  ... your code
})();
于 2013-01-20T15:12:35.390 に答える