Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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/8/grails/5.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 - Fatal编程技术网

Javascript函数(文档)是否在末尾加上了?

Javascript函数(文档)是否在末尾加上了?,javascript,Javascript,我正在尝试编写一个简单的facebook应用程序。在我需要的代码中,我发现: // Load the SDK asynchronously (function(d){ var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; if (d.getElementById(id)) {return;} js = d.createElement('script'); js.id = id;

我正在尝试编写一个简单的facebook应用程序。在我需要的代码中,我发现:

  // Load the SDK asynchronously
  (function(d){
   var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
   if (d.getElementById(id)) {return;}
   js = d.createElement('script'); js.id = id; js.async = true;
   js.src = "//connect.facebook.net/en_US/all.js";
   ref.parentNode.insertBefore(js, ref);
  }(document));
为什么这个函数被封装在()中,而(document)在最后被加上了? 我以前从未见过这种JavaScript魔法


感谢您的输入。

这是一个自动执行函数,它将
文档作为参数传递

这可以改写为:

var myFunc = function(d) {
    // code here
};

myFunc(document);

您可以使用此语法创建一个闭包,该闭包的值作为函数参数的参数传入
(document)
。此样式通常用于以下情况:

for (var x = 0; x < 10; x++) {
  (function(y) {
    $.ajax({ params: {value: y}})...
  })(x);
}
for(变量x=0;x<10;x++){
(功能(y){
$.ajax({params:{value:y}})。。。
})(x) );
}
这样做的目的是,它允许您将一组特定的值强制到该上下文中,当您希望循环的特定值可用于该迭代中的ajax调用时,这将特别有用

JavaScript有一个称为隐含全局变量的特性。每当使用一个名称时,解释器都会在作用域链中向后搜索该名称的var语句。如果未找到任何变量,则假定该变量为全局变量。如果在分配中使用,则会在全局文件不存在时创建全局文件。这意味着在匿名闭包中使用或创建全局变量很容易。不幸的是,这导致难以管理代码,因为(对人类)不清楚给定文件中哪些变量是全局变量

幸运的是,我们的匿名函数提供了一个简单的选择。通过 将全局变量作为参数传递给匿名函数,我们导入 将它们输入到我们的代码中,这比暗示的更清晰、更快 全球的。下面是一个例子:


引用自:

这是一个匿名函数,将文档作为argument@koala_dev这可能是一个答案。是的,我现在看到这是一个非常类似的问题,但是它的措辞非常奇怪,我在搜索中找不到这个问题。这是创建一个函数,并立即使用一个参数。你可能会问,为什么要这样做?为了不让函数内部(如
var js,id…
等)污染全局名称空间,我不知道应该将其标记为重复还是只使用引用来回答。请根据需要进行编辑。