jquery中ajax回调函数定义函数作为参数的问题?

ClassicSong 2015-08-13 04:57:53
今天做一个项目遇到了一个奇怪的问题,虽然解决了,总还是放不下自己原来的写法。下面附上自己写的代码

$.ajax({
url: registerUrl,
type: "GET",
dataType: "JSON",
data: {
r:Math.random()
},
success: function (d) {
if (d.isSuccess) {
alert("注册成功!");
$("#register").pop("close");
quite(trueFn1, falseFn1);
function trueFn1(d) {

alertFn(null, null, true);
}
function falseFn1(d) {
alert(d.Message);
}

}else{
alert(d.message);
}

}

});
代码中标红的位置会有问题
错误如下图:


自己琢磨了下,作用域链找不见这个变量,难道是quite(trueFn1, falseFn1)调用时它的作用域链中访问不到trueFn1这个函数?trueFn1是用函数声明定义的。那就改成函数表达式呗,改了果然正常了。改后的代码如下:
$.ajax({
url: registerUrl,
type: "GET",
dataType: "JSON",
data: {
r:Math.random()
},
success: function (d) {
if (d.isSuccess) {
alert("注册成功!");
$("#register").pop("close");
var trueFn1 = function (d) {

alertFn(null, null, true);
}
var falseFn1 = function (d) {
alert(d.Message);
}
quite(trueFn1, falseFn1);


}else{
alert(d.message);
}

}
});
项目上是没问题了,可是我的疑惑还存在,为什么呢??希望指导一二!!!!!
...全文
188 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ClassicSong 2015-08-14
  • 打赏
  • 举报
回复
受教了,万分感谢。。
顾小林 2015-08-14
  • 打赏
  • 举报
回复
放到外面function trueFn1(d) { alertFn(null, null, true); } function falseFn1(d) { alert(d.Message); }
天际的海浪 2015-08-13
  • 打赏
  • 举报
回复
function funname() {} 函数定义会在代码执行前预先解析函数声明,使函数可以在定义函数语句的前面被访问。 在if语句体内定义函数,浏览器就不知道应不应该预先解析函数声明
ClassicSong 2015-08-13
  • 打赏
  • 举报
回复
没有用严格模式,忘记说浏览器了,我的谷歌是没问题的,是在火狐浏览器中出现的,版本如下图:



还有个小疑问,在if语句体内定义函数会有异常出现吗???
天际的海浪 2015-08-13
  • 打赏
  • 举报
回复
我这里测试正常 你是不是用了js的严格模式 别在if语句体内定义函数

87,883

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧