Javascript 如何从jQ的AJAX请求内部运行本地函数?
如何从标记行运行firstOne函数?这可能是一个无趣的问题,但我不了解JS名称空间,我尝试了Javascript 如何从jQ的AJAX请求内部运行本地函数?,javascript,jquery,Javascript,Jquery,如何从标记行运行firstOne函数?这可能是一个无趣的问题,但我不了解JS名称空间,我尝试了 从JS良好实践的角度来看,这种定义函数好吗?您的代码看起来不错,应该运行良好 与许多其他编程语言不同,Javascript有一个范围查找链。如果在本地作用域中找不到函数或变量,Javascript将在其上方的作用域中查找它。如果在那里也找不到它,它会在链的更上面寻找它,直到它碰到头部对象,在浏览器中它就是窗口对象。如果在那里没有找到它,那么它会抛出一个错误 由于第一个函数是在AJAX对象正上方的作用域
从JS良好实践的角度来看,这种定义函数好吗?您的代码看起来不错,应该运行良好 与许多其他编程语言不同,Javascript有一个范围查找链。如果在本地作用域中找不到函数或变量,Javascript将在其上方的作用域中查找它。如果在那里也找不到它,它会在链的更上面寻找它,直到它碰到头部对象,在浏览器中它就是窗口对象。如果在那里没有找到它,那么它会抛出一个错误
由于第一个函数是在AJAX对象正上方的作用域中声明的,Javascript应该可以为您找到它。无需手动引用父作用域。您所做的工作有效。这段文字解释了为什么: 可以在函数中嵌套函数。嵌套的内部函数对其包含的外部函数是私有的。它也形成了一个闭合 由于嵌套函数是闭包,这意味着嵌套函数可以继承其包含函数的参数和变量。换句话说,内部函数包含外部函数的范围 总结如下: 只能从外部函数中的语句访问内部函数 内部函数形成闭包:内部函数可以使用外部函数的参数和变量,而外部函数不能使用内部函数的参数和变量 这就解释了为什么可以在Ajax回调中调用firstOne
这是否是一个好的设计完全取决于你想要实现什么。如果第一个函数可以在代码的多个部分中重用,那么将其定义为嵌套函数肯定是一个错误的决定,因为它只能在本地上下文中访问。但是,例如,如果您在secondOne中有两个Ajax调用,它们在回调中都需要相同的功能,那么最好将其封装在本地嵌套函数中。如果您只需要一次该行为,那么将其声明为单独的函数可能会有些过火和额外的键入。您尝试过吗?您收到错误了吗?看起来您一直在从标记行运行firstOne函数。理论上这是可行的。但是您永远不会执行第二个,因此从来不会发出Ajax请求。谢谢大家。我真蠢,没跑第二个。
var main = {
doSomething: function(){
function firstOne(){}
function secondOne(){
$.ajax({
success: function(){
firstOne(); /* here I want the previous function */
}
});
}
}
}