Javascript函数(文档)是否在末尾加上了?
我正在尝试编写一个简单的facebook应用程序。在我需要的代码中,我发现: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;
// 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…
等)污染全局名称空间,我不知道应该将其标记为重复还是只使用引用来回答。请根据需要进行编辑。