2012-06-26 3 views
7

多くのコードで%が見られました。私にその目的またはそれが何を説明することができますか?JavaScriptのパーセント(%)は何ですか?

P .: %は、Google検索では無視されているため、Googleで検索できませんでした。

編集:私は数学のオペランドを知っています13 % 10 = 3しかし、私が見たものはreturn %fooです。

+0

さて、あなたは 'パーセント記号javascript'を探してみることができます。それはモジュラス演算子であることをあなたに導きます。 – bezmax

+1

'return%foo'?より完全な例がありますか?私はそれが何であるかは分かりません。 –

+0

@dystroy http://stackoverflow.com/a/7299040/1365010例文 – user1365010

答えて

9

コメントに記載されたリンクに基づいて、%文字が、JavaScriptソースの解析中に実行されるC++ランタイムのメソッドを示すために、V8 JavaScript engineソースコードの一部として使用されているようです。例えば

string.jsの行:

return %StringBuilderConcat(parts, len + 1, ""); 

パーサが遭遇する場合、StringBuilderConcat方法が実行されます。のV8 JavaScriptファイルで使用できるランタイムメソッドのリストを見つけることができます(C++での経験はありませんので、StringBuilderConcatメソッドとは何の関係もないことがわかっているので、string.js私は)それは同じことだと思う:

#define RUNTIME_FUNCTION_LIST_ALWAYS_1(F) \ 
    /* Property access */ \ 
    F(GetProperty, 2, 1) \ 
    F(KeyedGetProperty, 2, 1) \ 
    /* ... */ 
    F(StringBuilderConcat, 3, 1) \ 
    /* ... */ 

すでにreturn %fooはJavaScriptでにSyntaxErrorを投げるだろう、述べてきたように。

+0

マイナーな訂正:パーサーは実際にはコード自体を_execute_しません(引数が変数でない場合は解析エラーを引き起こす '%IS_VAR'を除きます)。パーサーはCallRuntime ASTノードを作成します(https://github.com/v8/v8/blob/master/src/parser.cc#L4720-4763)。コンパイラは、対応するランタイム関数(https://github.com/v8/v8/blob/master/src/ia32/full-codegen-ia32.cc#L3797-3834)への呼び出しを発行するか、ifそれはinlinableです(例 '%_IsSmi':https://github.com/v8/v8/blob/master/src/ia32/full-codegen-ia32.cc#L2518-2536)。 –

関連する問題