; (function ($) { ……}(jQuery)); jquery 程序这样开头,这样结尾,什么意思?
为什么不是这样?
$(document).ready(function(e) {
});
1
shunia 2016-03-03 09:34:21 +08:00
怕有人瞎搞,在运行过程中,把$换了。用方法包一下,可以尽量保证方法体里的$都是 jQuery 。
所以就是:把不可控尽量变得可控。 |
2
plqws 2016-03-03 09:36:42 +08:00
前者是一个纯粹的自执行函数,后者只是一个 DOM 渲染完毕的回调
|
3
hansnow 2016-03-03 09:42:09 +08:00
document ready 的话,可以看官方文档
https://learn.jquery.com/using-jquery-core/document-ready/ // Shorthand for $( document ).ready() $(function() { console.log( "ready!" ); }); 为啥这样开头和结尾不知道 |
4
jugelizi 2016-03-03 09:43:14 +08:00
JavaScript 库使用 $ 作为函数或变量名,在 jQuery 中,$ 仅仅是 jQuery 的别名。
|
5
demo 2016-03-03 09:47:07 +08:00
|
6
yuankui 2016-03-03 09:47:56 +08:00
搭车问下
function() { //do somthing }() 这样做是什么意义? |
8
demo 2016-03-03 09:53:06 +08:00
简单说就是全局命名空间污染与 IIFE (Immediately-Invoked Function Expression ,立即执行的函数表达式),可以看: http://suqing.iteye.com/blog/1981591/
|
9
codegeek 2016-03-03 09:57:24 +08:00 4
1.最前面的分号是为了避免文件合并时出现错误,因为有的代码风格结尾不喜欢用分号;
2.把代码放在一个匿名的立即执行函数闭包里,避免全局变量污染; 3.传 jQuery 而不是别民,是为了确保传入的是 jQuery,毕竟还有其他的库也是用$。 |
11
sciooga 2016-03-03 11:00:24 +08:00
@yuankui
你是不是写错了?应该是这样吧 (function() { //do something })() 同样是为了避免全局变量污染,这种自执行的函数有好几种写法。 1. 楼主说的 (function(){ /* code */ }()) 这种最常见了。 2. 我认为你想表达的 (function(){ /* code */ })() 3. 运算符(! + ~ -)开头的 !function(){ /* code */ }() 最后如果你没有写错那我觉得你那样写并没有什么特别的意义。 |
12
jsonline 2016-03-03 11:05:25 +08:00 via Android
归根结底,是因为 JS 只有函数作用域,没有块级作用域。
|
13
v1024 2016-03-03 11:14:55 +08:00
; (function ($) {
}(jQuery)); 1. 开头的; 是为了防止与其他代码合并时的错误 2. 用(function(){})(); 包装,保证内部变量不污染全局 3. $ 和 jQuery ,是为了保证 $指代 jQuery ,因为有可能$ 被别人覆盖掉 |
14
lwbjing 2016-03-03 11:36:02 +08:00
嗯。上面都说了。。
|
15
br00k 2016-03-03 11:36:49 +08:00
jQuery(function ($) {})
|
17
juxingzhutou 2016-03-03 13:31:19 +08:00
我觉得可以把这个理解为一个语句块,类似 C 风格的
``` { $ = jQuery; //使用 jQuery 的代码 } ``` |
18
vincenttone 2016-03-03 13:48:46 +08:00
(function ($) { ……}(jQuery));
我们分解一下: var xxx = function ($) {.......}; xxx(jQuery); 这里只是一口气写成了(function ($) { ……}(jQuery)); 所以这里定义了一个匿名函数并调用了它,也不用声明 xxx 这个变量了。 那为什么不这样写呢?: var $ = jQuery; ........ 很明显怕有污染,假设我写了一段代码: var $ = 1; var $ = jQuery; ........ $++; 这样会死。。。吧? 那我们这么写: var $ = 1; var xxx = function ($) {.......}; xxx(jQuery); $++; 或者干脆: var $ = 1; (function ($) { ……}(jQuery)); $++; 就应该没事了。 ps.我日常不写 js ,规范神马的不知道, so ,规范问题就不要指出了。。。语法或者内容有问题欢迎。 |