2014-02-17 3 views
9

Так что мне нужна функция, которая увеличивает значение переменной say n = 0. Когда функция запускается, значение этой переменной должно быть увеличено и оно не должно быть равно 0. Для примера рассмотрим следующий код:Приращение значения каждый раз при запуске функции

function increment(){ 
    var n = 0; 
    n++; 
    return n; 
} 

Теперь каждый раз, когда вы запускаете эту функцию вы получите значение 1. Но мое требование, если вы запустите эту функцию для 1-й раз, он должен быть 1, если вы запустите его во второй раз это должно быть 2 и так далее. Если вы не обновите страницу html и не запустите функцию снова, она не должна быть равна 0. Может ли кто-нибудь мне помочь?

Я новичок в кодировании, и любая небольшая помощь приветствуется. Заранее спасибо!!!

ответ

8

Вам нужно объявить n вне функции.

var n = 0; 

function increment(){ 

    n++; 
    return n; 
} 

Проблема - области. когда вы объявляете переменную внутри функции, она привязана к локальной области действия функции. как только функция будет выполнена, переменная исчезнет.

Объявление переменной в корневом уровне сценария помещает ее в глобальную область.

Другой способ сделать это будет иметь переменную снаружи, через которую вы проходите, а затем передать ее функции через параметр.

var i = 0; 

function increment(n){ 

    n++; 
    return n; 
} 

i=increment(i); 

для получения дополнительной информации об областях и переменных, просмотрите эту страницу: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Variable_scope

+0

+1, но его можно упростить до 'function increment() {return ++ n; } ' –

+0

Я не собираюсь просто, я собираюсь или информативно :) – Snowburnt

0
var n = 0; 
function increment(){ 
    n++; 
    return n; 
} 
+0

Хорошо спасибо за ответ на вышеупомянутый qn. Моим основным мотивом для этого является то, что я хотел реализовать систему, в которой кнопка должна менять цвет при щелчке, и при повторном нажатии он должен вернуться к исходному колону. Какие-либо предложения?? – Gopal1216

+1

Посмотрите на jquery toggleClass() –

16

Создать closure для хранения значения

Затворы функции, которые относятся к независимым (бесплатно) переменные.

Короче говоря, переменные из родительской функции замыкания остаются связанными с областью родителя.

var increment = (function(n) { 
 
    return function() { 
 
    n += 1; 
 
    return n; 
 
    } 
 
}(0)); // -1 if you want the first increment to return 0 
 

 
console.log(increment()); 
 
console.log(increment()); 
 
console.log(increment());

+0

Хорошо спасибо за ответ на приведенный выше qn. Моим основным мотивом для этого является то, что я хотел внедрить систему, в которой кнопка должна менять цвет при щелчке, и при повторном нажатии он должен вернуться к исходному цвету. Какие-либо предложения?? – Gopal1216

+0

@ Gopal1216 самым простым способом было бы использовать jQuery.добавьте класс toggle к клику, который добавит к нему класс css. Но это немного не по теме для этого вопроса, почему бы вам не открыть новый вопрос напрямую, спрашивая, что вы ищете? – Snowburnt

+0

Как простой в использовании простой Javascript. :) Но определенно не тема для этого вопроса. Создайте еще один вопрос. – Xotic750

0

Изучение областей поможет вам значительно. Здесь вы хотите, чтобы переменная «n» была глобальной.

var n = 0; //Declare n outside of the function makes it accessible to the function 
      //and to any other functions or expressions that want access to n 
function inc() { 
    n++; 
} 
1

Вы можете привязать данные к функции (поскольку функции являются объектами).

function increment(){ 
    increment.n = increment.n || 0; 
    return ++increment.n; 
} 
Смежные вопросы