Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从jQ的AJAX请求内部运行本地函数?_Javascript_Jquery - Fatal编程技术网

Javascript 如何从jQ的AJAX请求内部运行本地函数?

Javascript 如何从jQ的AJAX请求内部运行本地函数?,javascript,jquery,Javascript,Jquery,如何从标记行运行firstOne函数?这可能是一个无趣的问题,但我不了解JS名称空间,我尝试了 从JS良好实践的角度来看,这种定义函数好吗?您的代码看起来不错,应该运行良好 与许多其他编程语言不同,Javascript有一个范围查找链。如果在本地作用域中找不到函数或变量,Javascript将在其上方的作用域中查找它。如果在那里也找不到它,它会在链的更上面寻找它,直到它碰到头部对象,在浏览器中它就是窗口对象。如果在那里没有找到它,那么它会抛出一个错误 由于第一个函数是在AJAX对象正上方的作用域

如何从标记行运行firstOne函数?这可能是一个无趣的问题,但我不了解JS名称空间,我尝试了


从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 */
            }
         });
      }
   }
}