??????? 你了解javascript中的()吗?
??????? 也许,你会说,这有什么呀,不就是个括号吗?那好,下面代码正确吗?
??????? (function (a){ alert(a);})(12);
??????? 也许你会说,这种花稍的代码有什么用处?
???????? 我们了解,JS中函数是可以匿名的,但不了解,变量也是可以匿名的。关键是,我们不太在意JS中的括号。
???????? JS中的括号:
???????? 我们了解:var a={};? //{}是用来定义对象的
???????? 我们了解:var b=[]; //[]是用来定义数组的。{}和[]一起构成了Json
???????? 我们了解()吗?var str = (' abcde ').charAt(3);?
???????? () 是把括号内的代码存入匿名变量。
???????? 有人说JS是中的变量是函数加数据。这是因为:对象也是以函数构成的。
???????? 了解了这一点,我们再来看看已经熟悉的代码:
???????? alert(('abcdef').charAt(3));? //匿名字串变量
???????? alert(({s:'0'}).s) ; //匿名对象变量
???????? alert(([1,3,5,7,9])[2]); //匿名数组变量
???????? 再看这一行:
???????? (function s(a){ alert(a);})(12);? //有函数名
???????? 然后再看:
???????? (function (a){ alert(a);})(12);? //无函数名,匿名函数调用
???????? 由此可见,(代码)后面可以根据代码是函数是对象是数组,分别给"()",".","[]",从而成为 ()() 和 (). 和? ()[]。?
???????? 前述的结果,实际即是自动运行的函数。
???????? 要使函数自动运行,不需要多写调用该函数的代码。而是用()把要运行的函数括起来,后面再加一个()其中可以传入要传入的参数。
???????? 即:(匿名函数的代码)(传入的参数);
???????? 这样,函数的代码就自动运行了。
???????? 可以试一下以下的例子:
???????? (function(a){ alert(a);})(12);
???????? 要注意的是前面的()中是匿名函数代码(因为,我们没有必要,也不需要给它函数名),后面则是对函数调用的参数。
???????? 自动运行函数,是进行模块隔离的最常用的手段。jQuery代码就是放在自动运行函数中的。
???????? 我们来看看经典的解释:
(function( ) {? // Define an anonymous function.? No name means no global symbol
??? // Code goes here
??? // Any variables are safely nested within the function,
??? // so no global symbols are created.
})( );????????? // End the function definition and invoke it.
???????? 假如我们在页面中多次调用jQuery, 最好的办法就是用这样的代码:
???????? (function($){ //这里面,写你的代码!! ?})(jQuery);
???????? 最后,给大家一行代码,Hello,JavaScript!代码如下:
???????? (function (){ window['alert'](({s:'Hello, JavaScript!'})['s']) ; })();
???????? 此行代码的语法结构有5层:
???????? {s:'Hello, Javascript!'}? //json定义对象
???????? ({s:'Hello, Javascript!'})['s'] //将json定义的对象作为匿名对象,并用软编码方式访问其名为's'的属性
????????? window['alert'](({s:'Hello, Javascript!'})['s']) ; //用软编码方式调用window的alert方法,传入刚才访问的属性
?????????function (){ window['alert'](({s:'Hello, Javascript!'})['s']) ; } //将代码放到匿名函数中。
??????? (function (){ window['alert'](({s:'Hello, Javascript!'})['s']) ; })(); //实现匿名函数转换成匿名变量,对此匿名变量进行函数调用,使内部代码实现模块隔离。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?