ක්‍රියාකාරී ප්‍රකාශනය ඉදිරිපිට ජාවාස්ක්‍රිප්ට් ප්ලස් ලකුණ


875

මම වහාම ක්‍රියාත්මක කරන ලද කාර්යයන් පිළිබඳ තොරතුරු සොයමින් සිටිමි, කොතැනක හෝ මම මෙම අංකනය මත පැටලී සිටියෙමි:

+function(){console.log("Something.")}()

+ශ්‍රිතය ඉදිරිපිට ඇති ලකුණෙහි තේරුම / කරන්නේ කුමක්දැයි යමෙකුට මට පැහැදිලි කළ හැකිද ?


17
බෙන් අල්මන් මෙහි සියල්ල පැහැදිලි කරයි: mths.be/iife
මතියස් බයිනස්

Answers:


1329

පහත දැක්වෙන කොටස +ප්‍රකාශනයක් ලෙස සැලකීමට එය පාර්සර්ට බල කරයි . මෙය සාමාන්‍යයෙන් වහාම ක්‍රියාත්මක වන කාර්යයන් සඳහා භාවිතා කරයි, උදා:

+function() { console.log("Foo!"); }();

නොමැතිව +එහිදී, ව්යාකරණ විග්රහ එය (ප්රකාශනයක් හෝ කිහිපයක් නොවන ප්රකාශනය ප්රකාශ විය හැකි) ප්රකාශයක් බලාපොරොත්තු වෙනවා එහිදී රාජ්ය, මෙම වචනය නම් functionශ්රිතයක ආරම්භයේ වගේ ප්රකාශ කරනවාට වඩා උත්සවයකට ප්රකාශනය සහ එසේ ()එය පහත සඳහන් (ඉහත පේළියේ අවසානයේ ඇති ඒවා) සින්ටැක්ස් දෝෂයක් වනු ඇත (නමක නොපැවතීම, එම උදාහරණයේ දී). සමග වන +, එය නම උපයෝගී කර හැකි වන උත්සවයක්, විකල්ප සහ මුර්ත වන ප්රතිඵල වේ, එසේ වරහන් වලංගු වේ, ඉන් අදහස් වන්නේ, එය කාර්යය ප්රකාශනය වේ.

+විකල්ප වලින් එකක් පමණි. එය ද කළ හැකි -, !, ~, හෝ වෙනත් ඕනෑම ඒකජ ක්රියාකරු ගැන. විකල්පයක් ලෙස, ඔබට වරහන් භාවිතා කළ හැකිය (මෙය වඩාත් සුලභ ය, නමුත් වැඩි වශයෙන් හෝ අඩු වශයෙන් සින්ටැක්ටිකල් ලෙස නිවැරදි නොවේ):

(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());

13
වැඩි විස්තර මෙහි ඇත, benalman.com/news/2010/11/…
කුන්දන් සිං චෞහාන්

162
පාරෙන් එතීම උසස් අංකනයක් යැයි අපට කිව නොහැකිද? ප්‍රකාශන ඇතුළත් කිරීම සඳහා සේවය කරන පරෙන්ස් ගැන මම හොඳින් දනිමි. Js හි මෙම චමත්කාරජනක විකාරය ඔබ දැනටමත් නොදන්නේ නම් + මේ අවස්ථාවේ දී කරන්නේ කුමක්ද යන්න කිසිසේත් පැහැදිලි නැත.
ක්‍රිස්

1
සටහන: පාරෙන්ස් විකල්ප දෙකෙන්, jsLint දෙවැන්න කැමති වේ. මම හිතන්නේ jsHint අඩු විකාරයකි .
බීට්රූට්-බීට්රූට්

43
"ප්ලස්" අංකනය භාවිතා කරන බහුලව භාවිතා වන පුස්තකාලවලින් එකක් වන්නේ බූට්ස්ට්‍රැප් ය (මම මෙම ත්‍රෙඩ් එක කියවීම අවසන් කළේ එලෙසිනි).
විලේ


95

SO TJCrowder ගේ පිළිතුරට අනුබද්ධිත, +සාමාන්‍යයෙන් භාවිතා කරනුයේ මෙම SO පිළිතුර පැහැදිලි කරන පරිදි අගයක් සංඛ්‍යාත්මකව වාත්තු කිරීමට බල කිරීම සඳහා ය . මෙම අවස්ථාවෙහිදී එය 'යුනරි ප්ලස් ක්‍රියාකරු' ලෙස හැඳින්වේ (ගොග්ලිං පහසු කිරීම සඳහා).

var num = +variant;

එබැවින් ශ්‍රිතයක් ඉදිරිපිට එය ශ්‍රිතයේ ප්‍රති result ලය සංඛ්‍යාවක් ලෙස අර්ථ දැක්වීමට බල කළ හැකි ක්‍රමයක් විය හැකිය. එය තවමත් සිදුවී ඇති බවට මට සැකයක් ඇත, නමුත් න්‍යායාත්මකව JIT හට එය සංඛ්‍යාත්මකව පමණක් ශ්‍රිතයක් ලෙස සම්පාදනය කිරීමට භාවිතා කළ හැකිය. කෙසේ වෙතත්, විශාල ප්‍රකාශනයක භාවිතා කරන විට ඒකීය ප්ලස් සංක්ෂිප්ත වීම වැළැක්වීම සඳහා ඔබට වරහන් අවශ්‍ය වේ:

blah + (+(function(){ var scope; return "4"; })());

3
මෙය කවදා හෝ ඉහළ නැංවීම් 37 ක් ලබාගත්තේ කෙසේද? මෙම (+function() { ... })()අංකනය (වෙන් මෙම ප්රශ්නයට පිළිතුරු නැත යන කාරනය සිට) දෝෂ තොරව කිසි ක්රියාත්මක කළ හැකිය.
වයිට්කාර්ක්

6
hwhitequark: ශ්‍රිතය වටා ඇති වරහන් යුගලයක් + ඇමතුම මග හැරුණි. අංක වාත්තු පැහැදිලි කිරීම නිසා ඉහළ නැංවීම් වැඩි වී ඇති බවට සැක කරන්න.
ෆිල් එච්

10
හරි, මම නට්පික් කරන්න ඇති.
වයිට්කාර්ක්

2
H ක්‍රිස්ටෝෆ් මම එම වරහන් එහි තැබීමට නැඹුරු වෙමි. ඇත්ත වශයෙන්ම, ඔවුන් අතුරුදහන් වුවහොත් ඒවා එකතු කිරීමට මම බොහෝ දුර යන්නෙමි. එය සිදුවන්නේ කුමක්ද යන්න වඩාත් පැහැදිලි කරයි, තවද අවකාශය ඉවත් කිරීමෙන් කේතය අවම කළ විට ගැටළු වළක්වයි 3++function....
බෙන්ජම්

3
තව දුරටත් පරාවර්තනය වුවද, +function...එය අනවශ්‍යය. blah + function( ){ ... }( );එතීමේ වරහන් සඳහා අවශ්‍යතාවය ප්‍රතික්ෂේප කරන එම ප්‍රති result ලයම ලබා ගත හැකිය .
බෙන්ජම්

63

එබැවින් කෙටි පිළිතුර නම්, එය එක් ආකාරයකින් හෝ වෙනත් ආකාරයකින් ශ්‍රිත ප්‍රති results ල භාවිතා කිරීමෙන් සින්ටැක්ස් දෝෂයක් වළක්වන බවයි.

voidක්‍රියාකරු භාවිතා කිරීමෙන් ප්‍රතිලාභ අගය ගැන ඔබ උනන්දුවක් නොදක්වන බව ඔබට එන්ජිමට උපදෙස් දිය හැකිය :

void function() { console.log("Foo!"); }();

ඇත්ත වශයෙන්ම, සියල්ල වටා වරහන් තැබීම ද එම අරමුණු ඉටු කරයි.


48
අවලංගු කිරීම හෝ වරහන් වර්‍ගයන් වඩාත් යෝග්‍ය වේ. ඒවා WTF රහිත ය. + භාවිතා කිරීම යනු ඉතා බුද්ධිමත් නොවන ආකාරයේ බුද්ධියකි.
පීටර් වොන්

2
හොඳ කරුණක්. එක් ක්‍රියාකරුවෙකු භාවිතා කිරීම වර්තමානයේ කර්මාන්ත ප්‍රමිතියට එරෙහිව ගමන් කරන බවක් පෙනේ. සමහර විට "සිසිල් ළමයෙක්" සංවර්ධකයන් එය සඳහා ඉවත් කරන, වෙනත් ආකාරයකින් මම තවමත් ඒ වෙනුවට අඩුව හෝ (වඩා දෙයක් භාවිතා ලක්ෂ්යයක් දුටු නෑ)
dudewad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.