Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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";包括「;功能?_Javascript_Jquery_Python_Include - Fatal编程技术网

JavaScript";包括「;功能?

JavaScript";包括「;功能?,javascript,jquery,python,include,Javascript,Jquery,Python,Include,我想知道是否有一个javascript“include”函数(类似于python中的函数),我正在寻找一些东西,但除了$.load()和google.load()之外,什么都找不到 因此,我大胆地创造了一个脚本,可以这样做只是为了好玩,所以: var include = function( lib ) { // start with jQuery if(lib == "jquery") { var script = document.createElement("scri

我想知道是否有一个javascript“include”函数(类似于python中的函数),我正在寻找一些东西,但除了
$.load()
google.load()
之外,什么都找不到

因此,我大胆地创造了一个脚本,可以这样做只是为了好玩,所以:

var include = function( lib ) {
// start with jQuery
    if(lib == "jquery") {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://code.jquery.com/jquery.min.js";
        script.defer = "defer"; // should I use script.setAttribute('defer', 'defer')?
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(script, s);
    }
}
然后,在单独的脚本中:

include("jquery");
$("p").innerHTML = "Worked!";
但是我得到了一个错误$未定义

这很有意义,因为脚本是在jQuery加载之前运行的。所以我的问题是,有没有办法确保include脚本在之前运行?我见过
回调
解决方案,看起来像这样:

include("http://code.jquery.com/jquery.min.js", function() {
    $("p").innerHTML = "Worked!";
});
但我确实想知道是否有什么东西(如我上面提出的)更整洁一点


任何帮助都将不胜感激

您正在重新发明轮子:有大量的库/组件基本上做着相同的工作,但有更多的功能。检查并开始。

由于JavaScript的运行方式,没有办法做到更干净。您可以有一定的时间间隔来加载所需的所有文件,如下所示

window.includeFiles = [];
function include(file){
   window.includeFiles.push(file);
}
function initialize(callback){
   for(var i = 0; i < window.includeFiles.length; i++){
      var script = document.createElement("script");
      script.type = "text/javascript";
      script.src = window.includeFiles[i];
      script.defer = "defer"; // should I use script.setAttribute('defer', 'defer')?
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(script, s);
      if((i+1)==window.includeFiles.length){
         callback();
      }
   }
}

唯一的问题是它不测试网络,这只能通过检查包含的库中是否有可用的函数来实现。Witch让raina77ow的答案使用更好的解决方案。

我认为最简单的方法是使用
head.js


+1 Require.js具有在浏览器和node.js中工作的额外优势“我见过类似这样的回调解决方案:
include(”http://code.jquery.com/jquery.min.js“,function(){$((“p”).innerHTML=“Worked!”})
,但我确实想知道是否有什么东西(如我上面建议的)更整洁一些。”我知道所有这些图书馆和东西。不要试图重新发明轮子。只是想找到(或制作)类似于python的东西。@Jacedc如果说“整洁”,你指的是同步/过程性的,不需要回调,那么就没有了。JavaScript还没有类似于协同程序的功能,在协同程序中,函数可以暂停执行,甚至可以在不阻塞的情况下返回。将很接近,但这是ES6即将推出的功能。虽然,对于一些可扩展的环境,如Node.js,您可能会找到解决方案,如.I,但是您忽略了异步js的黄金法则:
'below'
并不意味着
'after'
。而
包含
-默认情况下,外部JS是异步的,因为它基本上是在DOM.Ah中添加一个元素。可以只是想知道。。。我在想,是否有任何可能的方法可以在不将
script
元素发布到
html
元素的情况下包含脚本?这似乎是包含脚本的一种非常传统的方式。
include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
initialize(function(){
  //code ready
});
head.js(
  "/path/to/jquery.js", 
  "/google/analytics.js", 
  "/js/site.js", function() {

   // Code that executes when all the scripts have been loaded

});