不太明白这个JS函数是如何获取数据的。这是我的代码的第一个变体:
function iReceived(msg) {
console.log(msg.data);
};
var rest = $.ajax({
type: "POST",
dataType:'jsonp',
url: "https://api.novaposhta.ua/v2.0/json/",
data: {"modelName": "Address",
"calledMethod": "getCities",
"methodProperties":{},
"apiKey": "XXXXXXXXXXXXXXXXXXX"},
success: function(e) { iReceived(e) },
});
函数iReceived
打印它获得的数据。但在第二种变化中:
function iReceived(msg) {
console.log(msg.data);
};
var rest = $.ajax({
type: "POST",
dataType:'jsonp',
url: "https://api.novaposhta.ua/v2.0/json/",
data: {"modelName": "Address",
"calledMethod": "getCities",
"methodProperties":{},
"apiKey": "XXXXXXXXXXXXXXXXXXX"},
success: iReceived(e) ,
});
函数返回undefined
。请告诉我为什么这个变体以不同的方式工作。
最佳答案
在 JavaScript 中,您只需通过不带括号的名称引用函数即可将函数作为参数传递给其他函数。
因此您需要传递对成功回调的引用。如果您传递iReceived()
,它会立即执行,而不是您所期望的。
第一个示例之所以有效,是因为您将一个匿名函数传递给了成功回调,该回调在请求完成后立即执行。当执行匿名函数时,它可以使用加载的数据运行您的函数。
有关此主题的进一步阅读
- http://nsono.net/javascript-pass-by-value-or-pass-by-reference
- https://snook.ca/archives/javascript/javascript_pass
代码
function iReceived(msg) {
console.log(msg.data);
};
var rest = $.ajax({
type: "POST",
dataType: 'jsonp',
url: "https://api.novaposhta.ua/v2.0/json/",
data: {
"modelName": "Address",
"calledMethod": "getCities",
"methodProperties": {},
"apiKey": "XXXXXXXXXXXXXXXXXXX"
},
success: iReceived,
});
关于javascript - 当未包装在匿名函数中时,属性的行为有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026082/