在jsp中看到这样一段程序
<script type="text/javascript">
(
function ()
{
var source = [
{
url: "",
src: "images/topbg1.jpg"
},
{
url: "",
src: "images/topbg2.jpg"
},
{
url: "",
src: "images/topbg3.jpg"
},
{
url: "",
src: "images/topbg4.jpg"
},
{
url: "",
src: "images/topbg5.jpg"
}
];
$.each(source,function(i){})
.......
}
)();</script>
我想问下一开始的"("号和结尾的括号有什么用?我试过把括号去掉这段代码就不起作用了。还有没有函数名的函数和其他函数有什么区别?
<script type="text/javascript">
(
function ()
{
var source = [
{
url: "",
src: "images/topbg1.jpg"
},
{
url: "",
src: "images/topbg2.jpg"
},
{
url: "",
src: "images/topbg3.jpg"
},
{
url: "",
src: "images/topbg4.jpg"
},
{
url: "",
src: "images/topbg5.jpg"
}
];
$.each(source,function(i){})
.......
}
)();</script>
我想问下一开始的"("号和结尾的括号有什么用?我试过把括号去掉这段代码就不起作用了。还有没有函数名的函数和其他函数有什么区别?
解决方案 »
- js读取本地文件
- 为什么我这个“加入收藏夹”代码在FF下失效了
- 关于document.execCommand ("SaveAs",true,"baidu.doc")这个命令
- javaScript能实现删除触发功能吗?
- div按纽效果,状态变换遇到问题,急,在线等。。
- 网上找到一段JS代码,是自动登录GMAIL的,我想改成自动单选和多选并提交,该怎么改?
- 关于JS逐行区块暂停式行滚动效果,一个很奇怪的问题
- 高手请进!
- 在jscript里可以运行外部程序吗?
- 用JS保存Cookie 用户名 密码实现问题
- 重写window alert方法遇到的一个问题,请大师指教
- 【新手求助】这个js效果怎么实现?
它是指形如这样的函数: (function {// code})(); 2. 疑问
为什么(function {// code})();可以被执行, 而function {// code}();却会报错? 3. 分析
(1). 首先, 要清楚两者的区别:
(function {// code})是表达式, function {// code}是函数声明.
(2). 其次, js"预编译"的特点:
js在"预编译"阶段, 会解释函数声明, 但却会忽略表式.
(3). 当js执行到function() {//code}();时, 由于function() {//code}在"预编译"阶段已经被解释过, js会跳过function(){//code}, 试图去执行();, 故会报错;
当js执行到(function {// code})();时, 由于(function {// code})是表达式, js会去对它求解得到返回值, 由于返回值是一 个函数, 故而遇到();时, 便会被执行.详细参看 http://topic.csdn.net/u/20101214/11/c8942086-1cac-4adf-a548-c59175e83ae2.html
var count = 5;
outputNumbers(count);
这里初始化了变量count,将其设置为5.当然,这里的变量是没有必要的,因为可以把值直接传给函数。为了让代码更简洁,我们在调用函数时用5来代替变量count,如下:
outputNumbers(5)
再看:
var someFunction = function(){
//这里是块级作用域
};
someFunction()
这个例子先定义了一个函数,然后立即调用它。定义函数的方式是创建一个匿名函数,并把匿名函数赋值给变量someFunction。而调用函数的方式是在函数名称后面添加一面圆括号,即someFunction()。通过前面的例子我们知道,可以用实际的值来取代变量count,那么这里也可以用函数实际的值来直接取代函数名,即:
function(){
//这里是块级作用域
}();
但是,这样会导致语法错误,因为javascript将function关键字当作一个函数声明的开始,而函数声明后面不能跟圆括号,然而,函数表达式的后面可以跟圆括号,这上面这段代码正是匿名函数的表达式,所以给它加对圆括号就可以了,如下:
(function(){
//这里是块级作用域
})();
到此为止,你的问题就搞定了我前段时间也刚刚学到这里,就给你分享了!
附: 去百度搜一搜“模仿块级作用域”和“匿名函数”,可以加深理解!
因为运算符优先级的关系,这里要用()把整个 function 包围起来,表示里面是一个整体的function对象。
(function(){...})();
其实可以看作:
var fun = function(){...};
(fun)();
当然这里的function已经用一个变量代替了,所以括号不再是必需的了,可以直接写成:
var fun = function(){...};
fun();
因为运算符优先级的关系,这里要用()把整个 function 包围起来,表示里面是一个整体的function对象。
(function(){...})();
其实可以看作:
var fun = function(){...};
(fun)();
当然这里的function已经用一个变量代替了,所以括号不再是必需的了,可以直接写成:
var fun = function(){...};
fun();