网上有人说是防止重名冲突,啥啥了,还什么闭包啥的。我就不明白有什么用,不过我还是知道这匿名函数是什么意思,就是把window作为参数传进去执行了一遍。//这里是源码
(function (window, undefined) {
// Define a local copy of jQuery
var jQuery = function (selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
}
//...
})(window);
我试了下 如果在后面重新定义$的话还是会覆盖JQuery中的$符号的像这样直接写var jQuery = fun... 有什么关系,我怎么没发现它这么写有什么好处求指点!
(function (window, undefined) {
// Define a local copy of jQuery
var jQuery = function (selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
}
//...
})(window);
我试了下 如果在后面重新定义$的话还是会覆盖JQuery中的$符号的像这样直接写var jQuery = fun... 有什么关系,我怎么没发现它这么写有什么好处求指点!
你还要自己主动调用一次 jQuery();其次,我也不懂!
直接写跟外套个匿名函数效果完全一样的!
我在想是不是里面用到undefined这个参数,但它undefined这个应该跟系统自带的undefined同一个意思。所以貌似也没必要阿。
**(..)
// Define a local copy of jQuery
var jQuery = function (selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init(selector, context);
}
//...
window.jQuery = window.$ = jQuery; //外面能够用$或jQuery函数,该句是关键
})(window);立即执行的匿名函数起到 隔绝 变量作用域 的作用。如 :
(function() {
var test = function () {
alert(1);
}
})();
这是在外面调用test函数是错误的,也就是说是调用不到的。这样就避免匿名函数中的变量与 外面的变量冲突。如果我们需要开放test函数给外部使用,只需要注册成window的属性即可。如下:
(function() {
var test = function () {
alert(1);
}
window.test = test;
})();
覆盖的是window的$属性,而非jquery里面的变量。匿名函数中不开放的变量,外面是无法应用和修改的。至于函数定义的写法function test () {...}var test = function (){...}var test = function ooxx(){...}以上三种都是可以的。很多大牛都推荐第二种写法,该写法更能体现在js中函数也是一种变量。