【发布时间】:2015-12-28 17:21:42
【问题描述】:
我知道有很多关于这个主题的问题,但我对两个特定场景之间的区别很感兴趣。在这里
场景 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 一无所知,因为它不是在 someMemberFunction 中创建的。但是对于场景 2,someMemberFunction 是否应该不知道 param1、param2 和 localVariable,因为它是 someMemberFunction 内部的闭包?
谢谢
【问题讨论】:
-
param1和param2定义在哪里?现在这两个例子都不会运行。 JavaScript 有 lexical 范围。这意味着如果您可以访问范围内的变量(例如param1),那么同一范围内的任何定义函数也可以访问它。 -
抱歉,我现在更新了问题。请您回复警报 1#7 的结果。谢谢
标签: javascript callback closures