У меня есть кое-что, чего я просто не понимаю, с помощью интерпретатора javascript.
Когда переменная передается в параметре хранимой функции, кажется, что она передается по ссылке, а не по значению.
Здесь PoC:
var nb = 10;
var varfunc;
function myFunc(a) {
console.log("after = " + a);
}
console.log("before = " + nb);
varfunc = function() {
myFunc(nb)
};
nb = nb + 1;
varfunc();
Я ожидал, что будет иметь значение "10" для обоих выходов.
Как я могу фактически передать значение «nb», когда инструкция «set» выполняется для переменной «varfunc»?
Я столкнулся с этой проблемой при установке свойства «onClick», в котором я связал функцию с глобальной переменной, передаваемой в качестве параметра:
var global_var = 0;
...
function oneFunction(){
var delImg = document.createElement("img");
delImg.src = "images/delete.gif";
delImg.onclick = function(){
deleteFG(global_var);
};
...
}
...
oneFunction();
Когда вызывается событие «onClick», функция «deleteFG ()» вызывается с текущим значением «global_var», а не со значением, которое было при обработке инструкции set для «onClick».
Я нашел грязное решение, создав временную переменную:
var global_var = 0;
...
function oneFunction(){
var delImg = document.createElement("img");
delImg.src = "images/delete.gif";
var tmp_var = global_var;
delImg.onclick = function(){
deleteFG(tmp_var);
};
...
}
...
oneFunction();
Может кто-нибудь объяснить, пожалуйста? :)