javascript中的全局导入
有人能给我解释一下这在javascript中的作用吗javascript中的全局导入,javascript,design-patterns,closures,globals,Javascript,Design Patterns,Closures,Globals,有人能给我解释一下这在javascript中的作用吗 (function (x,y){}(x,y)); 还是这个 // global import (function ($, YAHOO) { // now have access to globals jQuery (as $) and YAHOO in this code }(jQuery, YAHOO)); 我从未在java或c++等其他语言中见过类似的东西函数(x,y){}是一个异常的函数 (x,y)调
(function (x,y){}(x,y));
还是这个
// global import
(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));
我从未在java或c++等其他语言中见过类似的东西函数(x,y){}
是一个异常的函数
(x,y)
调用该函数,将x
和y
作为参数传递。第二个代码块的目的是使jQuery
作为$
可用(无需全局定义$
),并在本地范围内导入YAHOO
,以加快变量查找速度
除此之外,它还创建了一个新的作用域,因此使用var
定义的任何变量都不会是全局变量
第一个代码块通常以这种方式用于创建新变量,例如,当您处于循环中并且需要为回调创建具有当前i
值的变量时:
for(var i = 0; i < 10; i++) {
(function(i) {
setTimeout(function() {
alert("number " + i);
}, 1000 * i);
})(i);
}
for(变量i=0;i<10;i++){
(职能(一){
setTimeout(函数(){
警报(“编号”+i);
},1000*i);
})(i) );
}
如果没有这个新的作用域,您每次都会有相同的
i
,因此会发出10次“数字10”警报。第一个函数调用一个匿名函数,它使用x
和y
作为参数,接受2个参数,但不做任何事情
第二个做同样的事情。它使用$作为第一个参数名,并将jQuery作为参数值传递。因此,在这个函数中,可以使用$
引用jQuery
对象。这是一种将变量别名为函数中另一个名称的方法。C#有一个类似的概念,称为Lambda表达式
public static Func<int> Foo()
{
int a = 1,
b = 2;
return () => a + b;
}
您可以将一个返回TimeSpan的匿名函数传递到此方法中,该方法将对其执行一次传递的基准测试。漂亮,嗯
public static TimeSpan BenchmarkMe(Action timeThis)
{
Stopwatch sw = Stopwatch.StartNew()
timeThis();
sw.Stop;
return sw.Elapsed;
}