Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.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/design-patterns/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
javascript中的全局导入_Javascript_Design Patterns_Closures_Globals - Fatal编程技术网

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)调

有人能给我解释一下这在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)
调用该函数,将
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;
}