jma*_*mat 3 javascript syntax function
在下面,我对语法感到困惑
(function (h,j) { })
Run Code Online (Sandbox Code Playgroud)
在javascript中有一个函数坐在里面()是什么意思?
function myfunc(c, b) {
try {
(function (h, j) {
//do a bunch of stuff
})
} catch (e) {
myerror(e)
}
};
Run Code Online (Sandbox Code Playgroud)
har*_*rto 15
就其本身而言,这样的函数声明是无用的.这种声明只有在您实际调用函数时才有用,如下所示:
(function (h, j) { ... } (x, y));
Run Code Online (Sandbox Code Playgroud)
这通常用于隐藏变量,因为JavaScript只有函数作用域(没有块作用域).
一些例子 - 希望这些不会混淆事物......
正如评论中所提到的,此技术对于将变量保持在全局范围之外非常有用.例如,某些初始化脚本可能会执行以下操作:
(function () {
var x = 42;
var y = 'foo';
function doInitialisation(a, b) {
// ...
}
doInitialisation(x, y);
}());
Run Code Online (Sandbox Code Playgroud)
在函数完成后没有x,y或者doInitialisation是可见的.
另一个用例是避免循环中的闭包.例如,以下是一个众所周知的问题:
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
links[i].onclick = function () {
alert(i);
};
}
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,每个onclick处理程序共享相同的值i.功能范围可以避免这个:
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
links[i].onclick = (function (x) {
return function() {
alert(x);
}
}(i));
}
Run Code Online (Sandbox Code Playgroud)