【请教】一个结构问题 匿名函数(function(){})();最后的()表示立即执行参数jQuery是作为这个方法的参数传进去的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 想想你平时定义函数时,怎么做的var fn = function(jq){ jq('p').css('background', '#00f');}fn(jQuery);这样分开写,应该能明白了吧?只不过是把不使用fn这个变量保存了,可以减少一个变量的使用。 原理上面说了,不再赘述说没见过就不对了,jquery 就是这样包裹起来的(function(e, t) {})(window);当可能出现版本冲突时,这样写就很必要了 这个我理解了,只是,匿名函数外面也要套可括号就有点疑惑。(function(){})();而且这个括号不套就出错。难道两个括号连写是个功能?(1.匿名函数)(2.调用匿名函数,并传参); 这就跟function的写法有关了,这个具体怎么说呢var fn = function(jq){ jq('p').css('background', '#00f');}(jQuery);上面这样写就是可以的var fn = function(){}function fn(){}这两种写法的区别记得吗?一个是属于赋值语句的,只有当代码执行到这个地方时,才会解析后面一种,会在页面加载的预解析阶段就进行解析了。(1.匿名函数)(2.调用匿名函数,并传参);这样的写法,它实质上,是一个表达式的可是如果你不前面不加那个括号的话,就会在预解析的时候,报错啊,因为function定义是以大括号结尾的啊。大概就是这个意思,可以理解吗? 如果预解析后,函数的定义是不是不存在了?比如:function(name){ alert(name)}('你好');预解析后,就变成了:('你好');所以,括号执行不到前面的匿名函数了,给匿名函数加上括号,是为了阻止 JS 预解析吗?太感谢你了。 解释多少都没用!相信是越解释,你越糊涂(alert)(1);看看这个就该清楚了 有些猜测,你可以自己直接测试的,用测试验证自己的想法。比如你觉得预解析会不会找不到匿名函数了,但是这个时候,你也得先确认,匿名函数,是否可以进行预解析。function(name){ alert(name)}所以,就直接用一个空的文件,只包含上面的这一小段js,如果这个时候浏览器不会报错,就说明可以对匿名函数预解析。事实是,这个时候报错了,那也说明,预解析时,函数必须要有函数名的。所以,这里也就可以确认一个点,就是如果需要预解析的函数,它的结构必须是下面这样function fn(name){ alert(name)}如果想要使用一个匿名函数,然后又让大家找不到的话,就可以直接给加个括号了(function (name){ alert(name)})只是,这样写,是完全没有意义的,因为这段函数,我们也找不到,也不会执行,如果想要执行,那就是你最初写的那种样式了。 Mark一下下顺便问一下,这个和闭包有什么区别吗 不到100行的JS代码程序改进 求助如何用XMLHttpRequest传送文件? 在IE下出错 哪里问题? 谁有这样风格的extjs源码,共享下,能用给100分 关于js类的问题,急。。。 一个关于htm页面中的JavaScript解密的问题。如何解密 各路javascript高手请进,javascript对象问题? 关于在当前页面的table的一个cell中写入东西 textarea有限制? 我有一个连接.想点击的同时刷新两个页面,怎么实现? 调试求助:一个简单的JQUERY代码 帮忙取Json 内容。谢谢
jq('p').css('background', '#00f');
}fn(jQuery);这样分开写,应该能明白了吧?
只不过是把不使用fn这个变量保存了,可以减少一个变量的使用。
(function(e, t) {
})(window);当可能出现版本冲突时,这样写就很必要了
这个我理解了,只是,匿名函数外面也要套可括号就有点疑惑。
(function(){})();
而且这个括号不套就出错。
难道两个括号连写是个功能?
(1.匿名函数)(2.调用匿名函数,并传参);
jq('p').css('background', '#00f');
}(jQuery);
上面这样写就是可以的var fn = function(){}
function fn(){
}
这两种写法的区别记得吗?
一个是属于赋值语句的,只有当代码执行到这个地方时,才会解析
后面一种,会在页面加载的预解析阶段就进行解析了。(1.匿名函数)(2.调用匿名函数,并传参);
这样的写法,它实质上,是一个表达式的可是如果你不前面不加那个括号的话,就会在预解析的时候,报错啊,因为function定义是以大括号结尾的啊。大概就是这个意思,可以理解吗?
比如:function(name)
{
alert(name)
}('你好');预解析后,就变成了:('你好');所以,括号执行不到前面的匿名函数了,给匿名函数加上括号,是为了阻止 JS 预解析吗?太感谢你了。
(alert)(1);
看看这个就该清楚了
alert(name)
}
所以,就直接用一个空的文件,只包含上面的这一小段js,如果这个时候浏览器不会报错,就说明可以对匿名函数预解析。
事实是,这个时候报错了,那也说明,预解析时,函数必须要有函数名的。所以,这里也就可以确认一个点,就是如果需要预解析的函数,它的结构必须是下面这样
function fn(name){
alert(name)
}如果想要使用一个匿名函数,然后又让大家找不到的话,就可以直接给加个括号了
(function (name){
alert(name)
})只是,这样写,是完全没有意义的,因为这段函数,我们也找不到,也不会执行,如果想要执行,那就是你最初写的那种样式了。
顺便问一下,这个和闭包有什么区别吗