jS: Sekinlashtiruvchi funktsiyani o'zgarmaydigan raqamga qo'shing - Na ni beradi

Muammoim sodda, javascriptda global o'zgaruvchiga kliklash hodisasidan foydalanib qo'shilmayman. NaN natijasini qaytaradi.

var xx = 50;

$('div').click(function(){
  var xx = xx + 10;
  alert(xx)
});

JSFIDDLE

3
qo'shib qo'ydi muallif Andreas, manba

7 javoblar

Chunki siz bir xil o'zgaruvchini ( xx ) ikki marta e'lon qilmoqdasiz

See fiddle: https://jsfiddle.net/1beo7mgw/2/

Shunday qilib, nima uchun u NaNga qaytmoqda?

Chunki bu qatorda var xx = xx + 10; o'zgarmaydigan xx qayta aniqlanadi, lekin keyinchalik kiritilmagan har qanday qiymat bilan ishga tushirilmaydi.

var xx undefined ni ushlab turadi va unda aniqlanmagan 10 raqamni qo'shib raqamni (NaN)

4
qo'shib qo'ydi

Kodingizda sizning nomingiz global miqyosdagi va funktsional doirada o'zgaruvchini aniqlash uchun foydalanishda muammo yuzaga keladi. var xx = xx + 10 funktsiyasi darajasida bu kodda var bilan xx o'zgaruvchisini qayta aniqlashga harakat qilasiz, ammo uni qayta ishga tushirishni unutdingiz, shuning uchun standart aniqlanmagan parametrlarini o'zgartirmasangiz, siz 10 kodni qo'shasiz va u erda undefined + 10 raqam emas (NAN)

Ikki yondashuv mavjud,

  1. Yaxshi yondoshish Javascriptning ES6 versiyasini ishlatadi, let va var ni yo'q qiladigan const ikkita xususiyatni qo'shdi. const , agar u ishga tushirilgandan keyin uni mutatsion qilishga urinsa ham, u xatoga yo'l qo'ymaydi. allow faqatgina aniqlangan sohada amal qiladi, masalan. Agar siz loop ichida aylana o'zgarishini aniqlasangiz, u faqatgina chet elga tegishli emas. Kod kodi const sifatida 50 qiymatini o'zgartirishni o'zgartirdi va let/

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

const xx = 50;

$('div').click(function(){
let yy = xx + 10;
alert(yy)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
click
</div>
</div> </div>
  1. O'zgaruvchilar nomini o'zgartiring va ikkala har ikkala joyda belgilangan ikki xil o'zgaruvchining ism-sharifingiz borligini tekshiring:

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

var xx = 50;

$('div').click(function(){
var yy = xx + 10;
alert(yy)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
click
</div>
</div> </div>
2
qo'shib qo'ydi

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

window.xx = 50;

$('div').click(function(){
  window.xx = window.xx + 10;
  alert(window.xx)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>click</div>
</div> </div>

However, you should be careful with the global variables to avoid conflicts, http://www.javascripttoolbox.com/bestpractices/#namespace

0
qo'shib qo'ydi

Buning sababi, agar funktsiya funktsiyasi ichkariga kirsa, u birinchi marta mahalliy o'zgaruvchini oladi, keyin esa global o'zgaruvchining nazoratini tekshirib chiqadi.

funktsional ichidagi o'zgarmaydigan nomingizni o'zgartiring.

<div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code">

<!DOCTYPE HTML>
<html>
<head>
    <title></title>
    <script type="text/javascript">
    var x = 50
        function Show(argument) {
           //body...
            var y = x + 10;
            alert(y);
        }
    </script>
</head>
<body>

<button onclick="Show()">show</button>
</body>
</html>
</div> </div>
0
qo'shib qo'ydi

Argumentlar "doirasi" ni o'qing:

https://www.w3schools.com/js/js_scope.asp

Sizning funktsiyangiz global miqyosdagi tashqi dir, shuning uchun funktsiyadan tashqarida "xx" ni e'lon qilsangiz kodingizdagi biror narsa buni ko'rishingiz mumkin. Sizning funktsiyangizni ning ichida lokal tortishish funktsiyasi ichidagi "xx" ni e'lon qilish funktsiyangiz ichidagi biror narsani ko'rishingiz mumkin degan ma'noni anglatadi. Biroq, uni global ravishda va deb e'lon qilganingiz uchun mahalliy funktsiyadagi butun dunyo bo'ylab ni bekor qiladi.

0
qo'shib qo'ydi

Sizda bir xil nomdagi ikkita parametr mavjud. Ularning biri global, ikkinchisi mahalliy. Mahalliy o'zgarmaydiganga hech qanday qiymat berilmaydi. Xxx = 50 qiymatini mahalliy o'zgaruvchiga qo'shishni xohlaysizmi? Keyin siz var xx xx = xx + 10 satrini o'zgartirishingiz mumkin; xx + = 10 ga; Bu ishlaydi.

0
qo'shib qo'ydi
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb