Я знаю, что на эту тему было задано много вопросов, но меня интересовала разница между двумя конкретными сценариями. ЗдесьОпределение параметров в обратных вызовах с закрытием
Сценарий 1
//Global Scope
var a=1, b =2;
var callBackFn = function(param3,param4){
alert(a); //1 -->defined
alert(b); //2 -->defined
alert(param1); //3 -->?
alert(param2); //4 -->?
alert(param3); //5 -->defined
alert(param4); //6 -->defined
alert(localVariable); //7 -->?
}
var classObj = {
someMemberFunction: function(param1, param2{
var localVariable;
return $.AsyncCallFn(param1, param2).then(function(){
callBackFn(3,4);
});
}
};
classObj.someMemberFunction(5,6);
Сценарий 2
//Global Scope
var a=1, b =2;
var classObj = {
someMemberFunction: function(param1, param2){
var localVariable;
$.AsyncCallFn(param1, param2).then(function(param3,param4){
alert(a); //1 -->?
alert(b); //2 -->?
alert(param1); //3 -->?
alert(param2); //4 -->?
alert(param3); //5 -->?
alert(param4); //6 -->?
alert(localVariable); //7 -->?
});
};
}
classObj.someMemberFunction(5,6);
Что бы выходы оповещения # 1 до # 6 и что более важно, будет ли какая-то разница в сценарии 1 и сценарий 2.
Из моего понимания в сценарии 1 callBackFn ничего не знает о param1, param2 и localVariable, потому что это не было внутри внутри. Но для сценария 2, если someMemberFunction не будет знать param1, param2 и localVariable, потому что это закрытие внутри someMemberFunction?
Благодаря
Где находятся 'param1' и' param2'? Сейчас ни один из примеров не будет работать. JavaScript имеет * лексический * объем. Это означает, что если вы можете получить доступ к переменной внутри области действия (например, param1), то любая функция *, определенная * в той же области видимости, также может получить к ней доступ. –
Извините, теперь я обновил вопросы. Пожалуйста, не могли бы вы ответить с результатами оповещений 1 # 7. Спасибо – Tintin