Похоже, есть несколько вопросов здесь:
Выпуск 1: Если вы хотите изменить значение theBest
в функции обратного вызова, вы не можете изменить его, передав его в качестве параметра. Простые переменные передаются по значению, поэтому оригинал не изменяется, если вы измените его в функции.
Выпуск 2: Предполагая, что ec.get()
является операцией сети, вероятно, это асинхронная означает, что функция обратного вызова вы передаете его не называется не намного позже. Это означает, что функция обратного вызова завершения не будет выполняться еще при срабатывании предупреждения. Таким образом, это ничего не изменило.
Выпуск 3: Вы не можете передавать аргументы обратному сообщению так, как вы его объявили. Это определит эти аргументы, но если ec.get()
не собирается передавать аргументы точно так же, аргументы на самом деле не будут присутствовать при вызове. Помните, что это ec.get()
, который вызывает вашу функцию внутри. Он сам решает, какие аргументы получает ваш обратный вызов. Вы не можете это изменить.
Выпуск 4: Когда вы объявляете аргумент для вашей функции с тем же именем, как локальной или глобальной переменной (thebest
в вашем примере), вы создаете конфликт имен, который вызывает аргумент взять на себя это имя для объем вашей функции и сделать недоступную переменную более высокого уровня. В общем, это плохая идея назвать аргумент функции с тем же именем, что и любая другая переменная, которая находится в области видимости. Он просто просит вас или других людей, читающих ваш код, запутаться и сделать неправильные предположения о том, что изменяется или читается при использовании этого имени.
Один из способов сделать это заключается в следующем:
var thebest = 0;
var all = "whatever";
ec.get("id", function() {
// use the arguments "thebest" and "all" here which are available
// from the higher scope. They don't need to be passed in
alert(thebest);
alert(all);
});
// you can't alert on the value of thebest and all here because
// an asychronous callback won't have yet been called and
// won't have yet modified those values
Наибольшая переменная, определенная как аргумент функции, существует только в области функции между скобками. Только _функция (самая лучшая, все) _ {'here'} –