වෙනසක් තියෙනවා .
var x = 1
විචල්යය ප්රකාශ කරයි x
වත්මන් විෂය පථයේ (ක්රියාත්මක කිරීමේ සන්දර්භය). ප්රකාශනය ශ්රිතයක දිස්වන්නේ නම් - දේශීය විචල්යයක් ප්රකාශයට පත් කෙරේ; එය ගෝලීය විෂය පථයේ නම් - ගෝලීය විචල්යයක් ප්රකාශයට පත් කෙරේ.
x = 1
අනෙක් අතට, හුදෙක් දේපල පැවරුමකි. එය මුලින්ම උත්සාහ කරන්නේ x
විෂය පථයට එරෙහිව විසඳීමට ය . එය එම විෂය පථයේ ඕනෑම තැනක සොයාගත හොත්, එය පැවරුම සිදු කරයි; එය සොයාගත නොහැකි නම් x
, එය x
ගෝලීය වස්තුවක් මත දේපළ නිර්මාණය කරයි (එය විෂය පථයේ ඉහළ මට්ටමේ වස්තුවකි).
දැන්, එය ගෝලීය විචල්යයක් ප්රකාශ නොකරන බව සලකන්න, එය ගෝලීය දේපලක් නිර්මාණය කරයි.
මේ දෙක අතර වෙනස සියුම් වන අතර විචල්ය ප්රකාශන මගින් ගුණාංග නිර්මාණය වන බව ඔබ තේරුම් නොගන්නේ නම් එය ව්යාකූල විය හැකිය (විචල්ය වස්තුවක් මත පමණක්) නිර්මාණය කරන බවත්, ජාවාස්ක්රිප්ට් හි ඇති සෑම දේපලකටම (හොඳයි, ඊසීඑම්එස්ක්රිප්ට්) ඒවායේ ගුණාංග විස්තර කරන ඇතැම් ධජ ඇති බවත් - ReadOnly, DontEnum සහ DontDelete.
විචල්ය ප්රකාශනය DontDelete ධජය සමඟ දේපල නිර්මාණය කරන බැවින්, var x = 1
සහ අතර වෙනසx = 1
(ගෝලීය විෂය පථය තුළ ක්රියාත්මක කරන විට) අතර වෙනස වන්නේ කලින් පැවති විචල්ය ප්රකාශනය - ඩොන්ට් ඩීලීට් කළ හැකි දේපල නිර්මාණය කරන අතර දෙවැන්න එසේ නොවේ. එහි ප්රති consequ ලයක් ලෙස, මෙම ව්යංග පැවරුම හරහා නිර්මාණය කරන ලද දේපල පසුව ගෝලීය වස්තුවෙන් මකා දැමිය හැකි අතර, කලින් ඇති දේ - විචල්ය ප්රකාශනය හරහා නිර්මාණය කරන ලද - මකා දැමිය නොහැක.
නමුත් මෙය ඇත්ත වශයෙන්ම න්යායක් පමණක් වන අතර ප්රායෝගිකව මේ දෙක අතර ඊටත් වඩා වෙනස්කම් තිබේ , ක්රියාත්මක කිරීමේ විවිධ දෝෂ හේතුවෙන් (IE වැනි).
ඒ සියල්ල අර්ථවත් කරයි යැයි සිතමු :)
[2010/12/16 යාවත්කාලීන කරන්න]
ES5 හි (ECMAScript 5; මෑතකදී ප්රමිතිගත, භාෂාවේ 5 වන සංස්කරණය) ඊනියා “දැඩි මාදිලියක්” ඇත - තෝරාගත් භාෂා මාදිලියකි, එය ප්රකාශයට පත් නොකළ පැවරුම්වල හැසිරීම තරමක් වෙනස් කරයි. දැඩි ප්රකාරයේදී, ප්රකාශයට පත් නොකළ හඳුනාගැනුමකට පැවරීම විමර්ශන දෝෂයකි . මේ සඳහා හේතුව වූයේ අහඹු පැවරුම් අල්ලා ගැනීම, නුසුදුසු ගෝලීය දේපල නිර්මාණය කිරීම වැළැක්වීම ය. සමහර නව බ්රව්සර් දැනටමත් දැඩි මාදිලිය සඳහා ආධාරක රෝල් කිරීම ආරම්භ කර ඇත. උදාහරණයක් ලෙස, මගේ සංයුක්ත වගුව බලන්න .