点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, ...
点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家您好, ...
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家您好,
最近阅读了大量文章,试图揭开Javascript/SAPUI5中变量作用域的神秘面纱。 我了解事物的方式主要有两种:局部变量,在函数内部声明并且仅在内部可见;全局变量在函数外部声明,因此可以"全局"访问。 尝试了一个很小的示例,调试显示后,我在这里感到很困惑。 下面的小样:
onTestButtonPress:function(){ var url ="/img/DEV/sap/opu/odata/SAP/ZCONTRACTS_SRV/Agreement_ExportSet"; var oTest1 = []; var promise = $ .Deferred(); $ .ajax({ 网址:网址, 类型:" GET", dataType:" json", 成功:function(xhrData){ oTest1 = xhrData; promise.resolve(); } }); var readyToGo = function(){ jQuery.sap.log.error(oTest1); }; jQuery.when(promise).done()。then(jQuery.proxy(readyToGo,this)); }
在$ .ajax ...和jQuery.when ...语句上,当在主函数( ajax成功函数)所包含的函数中, oTest1 var的值为[] 和 readyToGo),相同的变量会产生参考错误。
根据"理论",除非我错过了一些事情,否则由于 oTest1 是在主函数的开头声明的,因此它在两个嵌套函数中也应可见。 我在这里想念的是什么,或者换句话说,我应该在哪里(或怎么可能?)在函数中声明变量以便可见?
预先感谢
格雷格
更新:经过(合理)建议,修改了有疑问的变量的代码和附加代码。 新代码是这样的:
$ .ajax({ 网址:网址, 类型:" GET", dataType:" json", 成功:功能(xhrData){ oTest1 = xhrData; promise.resolve();}}); var readyToGo = function(){ jQuery.sap.log.error(oTest1);}; jQuery.when(promise).done()。then(jQuery.proxy(readyToGo,this));
此代码正在运行,并且变量正常。 仍在运行旧代码,调试器将生成以下代码:
var-error.jpg (286.4 kB)
我认为问题是因为您使用的是jQuery.proxy方法。
该代理方法将回调内的上下文作为Controller切换到" this"。 您可以测试打印/访问this.oTest1吗?
如果我们可以利用ES6箭头功能和var/let/const语法,那么一切都应该更好,但是我们对IE的支持仍然很困难:(
一周热门 更多>